nc_to_obj¶
nc_to_obj liest eine netCDF-Datendatei oder eine Untermenge einer netCDF-Datendatei in ein UniScript-Objekt (Struktur).
- obj = nc_to_obj(ssFilename)
- obj = nc_to_obj(ncid)
- obj = nc_to_obj(ssFilename, svChannelNames)
- obj = nc_to_obj(ncid, svChannelNames)
Returnwert
obj ist ein Objekt mit den Kanälen und drei zusätzlichen Objekten: globals
,
channel_info
und order
. globals
enthält die globalen Attribute der
netCDF-Datei, channel_info
enthält für jeden Kanal ein Objekt mit den
Kanal-Attributen und order
ist ein Objekt, das die Reihenfolge der Kanäle in
der netCDF-Datei angibt.
Im Fehlerfall liefert die Funktion den Wert 0.
Parameter
- ssFilename
ssFilename ist der Name einer netCDF-Datei oder einer anderen Datendatei.
- ncid
ncid ist die Zugriffsnummer einer UniPlot-Datendatei (siehe nc_open oder nc_create). Die Datei muss mit nc_close wieder geschlossen werden. ncid kann alternativ zu ssFilename angegeben werden.
- svChannelNames
svChannelNames ist ein Stringvektor mit Kanalnamen, die importiert werden sollen (optional). Falls für svChannelNames der Zahlenwert 0 angegeben wird, kann die Auswahl über ein Dialogfeld erfolgen.
Beispiel
* ssFile = GetRootDirectory() + "samples/test1.xls";
* o = nc_to_obj(ssFile, ["EWGFAK", "Alpha"])
* o
[.
Alpha = matrix 17 x 1 [88.7, 81.78, 82.76, 88.35, 88.7, ...]
EWGFAK = matrix 17 x 1 [0.85, 0.86, 0.86, 0.87, 0.87, ...]
channel_info = [.
Alpha = [.
C_format = "%.2lf"
add_offset = 0
datatype = "real4"
long_name = "Alpha [-]"
scale_factor = 1
title = "Alpha"
units = "-"
]
EWGFAK = [.
C_format = "%.2lf"
add_offset = 0
datatype = "real4"
long_name = "EWGFAK [GRAD]"
scale_factor = 1
title = "EWGFAK"
units = "GRAD"
]
]
globals = [.
Creator = "UniPlot Excel Converter v3"
Origin = "d:\\uniplot_du\\samples/test1.xls"
Source = "STS Software and Testing Solutions GmbH (www.uniplot.de)"
__XSort__ = 0
columnseparator = "\\t"
firstdatarow = 3
missing_value = 1e+10
]
order = [.
[1] = "EWGFAK"
[2] = "Alpha"
]
]
object (obj at 0x3400C14)
Example 2
Berechnet den Mittelwert von mehreren NC-Dateien. Die Kanäle müssen alle die gleiche Punktanzahl haben. Es werden nur die Kanäle berücksichtigt, die in der ersten Datei vorhanden sind.
RegisterCommand("NC File", "NC_CalculateMean", "NC-Mean...");
UserBar_Add("NC_CalculateMean");
def NC_CalculateMean()
{
ssDir = "";
bMultiselect = TRUE;
bSortByDate = TRUE;
bConvertToNC = TRUE;
svFiles = GetOpenFileName_Data(ssDir, bMultiselect, bSortByDate, bConvertToNC)
if (svFiles[1] == "") {
return;
}
nFiles = len(svFiles);
if (nFiles == 1) {
return svFiles[1];
}
obj1 = nc_to_obj(svFiles[1]);
svChannel = obj1.channel_info.keys("");
obj1.globals.File1 = svFiles[1];
for (i in 2:nFiles) {
objn = nc_to_obj(svFiles[i]);
for (ssChan in svChannel) {
if (objn.has_key(ssChan)) {
if (len(obj1[ssChan]) == len(objn[ssChan])) {
obj1[ssChan] = obj1[ssChan] + objn[ssChan];
obj1.channel_info[ssChan].nNC = obj1.channel_info[ssChan].nNC + 1;
} else {
log_error("", "NC_CalculateMean", "Channel %s in file %s has different number of points", ssChan, svFiles[i]);
}
} else {
log_error("", "NC_CalculateMean", "Channel %s in file %s not found", ssChan, svFiles[i]);
}
}
obj1.globals[sprintf("File%d", i)] = svFiles[i];
}
for (ssChan in svChannel) {
obj1.channel_info[ssChan].nNC = obj1.channel_info[ssChan].nNC + 1;
n = obj1.channel_info[ssChan].nNC;
if (n > 0) {
obj1[ssChan] = obj1[ssChan] / n;
}
}
svPath = SplitPath(svFiles[1]);
ssNewFile = sum(svPath[1:3]) + "_Mean.nc2"
bRet = nc_from_obj(obj1, ssNewFile);
log_info("", ssNewFile, "NC-Mean Result. Double Click to open");
return;
}
History
Version |
Beschreibung |
---|---|
R2013.6 |
Beschreibung des Parameters ncid. |
5.14.7 |
Neu. |
Siehe auch
Überblick UniPlot-Datendateien, nc_from_obj, NC_Edit, NC_GetVarNames
id-464946