7. Überblick UniPlot-Datendateien¶
Wenn Sie mit UniPlot Daten importieren, z. B. aus Excel- oder INCA-Dateien, werden Sie zunächst in das UniPlot-Datenformat (nc2) konvertiert.
Bis UniPlot R2011 konnten optional netCDF-Dateien erzeugt werden. netCDF ist ein Dateiformat für wissenschaftliche Messdaten, das an der University Corporation for Atmospheric Research entwickelt wurde (siehe Copyright netCDF). Ab UniPlot R2012 werden netCDF-Dateien nicht mehr verwendet.
7.1. Inhalt einer UniPlot-Datendatei¶
Das folgende Listing enthält eine Ausgabe des Programms ncdump.exe. Das Programm gibt des Inhalt einer nc- oder nc2-Datei als Text-Datei aus. (Mit dem Programm ncgen.exe könnte diese Datei wieder in eine (binäre) nc2-Datei umgewandelt werden.)
1netcdf Test1.xls {
2dimensions:
3 n = 5 ;
4variables:
5 float EngSpd(n) ;
6 EngSpd:title = "EngSpd" ;
7 EngSpd:long_name = "EngSpd [RPM]" ;
8 EngSpd:units = "RPM" ;
9 float PME(n) ;
10 PME:title = "PME" ;
11 PME:long_name = "PME [bar]" ;
12 PME:units = "bar" ;
13
14// global attributes:
15 :Origin = "D:\\uniplot_du\\samples\\Test1.xls" ;
16 :Source = "STS Software and Testing Solutions GmbH (www.uniplot.de)" ;
17 :Creator = "UniPlot Excel Converter v3" ;
18
19data:
20
21 EngSpd = 1006.00, 1249.00, 1512.00, 1708.00, 1804.00;
22 PME = 8.47, 9.33, 10.64, 11.21, 11.27;
23}
7.1.1. Dimensionen¶
Jeder Kanal hat eine benannte Dimension. Alle Kanäle mit der selben Dimension werden im Dateneditor in einer Tabelle gemeinsam angezeigt.
Hat der Kanal A
die Dimension n1 = 10
(10 Punkte) und der Kanal B
die
Dimension n2 = 10
(ebenfalls 10 Punkte) werden die Kanäle im Dateneditor in
zwei verschiedenen Tabellen angezeigt.
Ein Kanal kann auch mehrere Dimension enthalten, diese Eigenschaft wird von UniPlot aber nur bei Stringkanälen verwendet. Dabei ist die erste Dimension die Anzahl der Strings und die zweite Dimension die Länge des längsten Strings. Stringkanäle sind also eine Matrix von Zeichen.
7.1.2. Attribute¶
Ein Attribut ist ein Key/Value-Paar. Der Key ist ein Name und der Value ist ein Wert mit einem Datentyp und einer Länge.
UniPlot-Datendateien kennen folgende Datentypen für Attribute und Kanäle:
Datentyp |
Bedeutung |
---|---|
NC_CHAR |
Ein Byte einer Zeichenkette. |
NC_INT8 |
Eine ganze Zahl mit 8 Bits (1 Byte). (Wertebereich -127 und 128 bzw. 0 bis 255.) |
NC_INT16 |
Eine ganze Zahl mit 16 Bits (2 Bytes). |
NC_INT32 |
Eine ganze Zahl mit 32 Bits (4 Bytes). |
NC_FLOAT |
Eine einfach genaue Gleitkommazahl (4 Bytes). |
NC_DOUBLE |
Eine doppelt genaue Gleitkommazahl (8 Bytes). |
Neben dem Datentyp hat der Attribut-Wert eine Länge. Ist der Attribut-Wert eine Zeichenkette, ist die Länge die Anzahl an Bytes. Ist der Attributwert ein Vektor von doppelt genauen Gleitkommazahlen, ist die Länge die Anzahl der Gleitkommazahlen.
Auf Attributwerte kann immer nur als Ganzes zugegriffen werden. Um z. B. ein Zeichen eines Attributwertes zu ändern, wird der ganze Attributwert gelesen, geändert und anschließend komplett wieder gespeichert. Bei Kanälen (siehe unten) können einzelne Zahlen geändert werden, ohne den ganzen Kanal lesen bzw. schreiben zu müssen.
Attribute werden deshalb für kleine Datenmengen verwendet (kleiner als 1.000 Bytes), sie dürfen aber auch einige MB groß sein.
Eine UniPlot-Datendatei kann bis zu 20.000 globale Attribute enthalten. Global heißen die Attribute, weil sie sich auf die ganze Datei beziehen. Die Kanäle enthalten ebenfalls eine Liste von Attributen, den Kanal-Attributen.
Unter Standard-Attribute werden die Attribute beschrieben, die UniPlot verwendet.
7.1.3. Kanäle¶
Kanäle sind ebenfalls Key/Value-Paare. Der Key ist der Kanalname und der Wert ist ein Vektor mit Zahlen. Die Vektorlänge kann bis zu ca. 2,1 Milliarden Elemente betragen.
time = [0.1, 0.2, 0.3, ..., 2.000.000]
7.2. Kanal Namen¶
Ab UniPlot 5.14.5 dürfen die Kanalnamen die folgenden Sonderzeichen enthalten:
.
, -
, +
, $
, #
, ~
, !
, ^
, &
, %
. Damit
der Formelinterpreter weiterhin wie gewohnt benutzt werden kann und keine
Probleme beim Datenaustausch oder in Automatisierungen entstehen, kann der
Kanalname alternativ auch mit Unterstrichen anstatt Sonderzeichen an die Funktion
übergeben werden. Beispiel: Die NC-Datei enthält einen Kanal AI50%+m
.
Die folgenden beiden Aufrufe liefern die selbe varid:
varid = nc_varid(ncid, "AI50%+m");
varid = nc_varid(ncid, "AI50__m");
Wenn die NC-Datei jedoch Kanalnamen enthält, die sich nur durch Sonderzeichen
unterscheiden, liefert der Aufruf mit Unterstrichen unter Umständen
verschiedene varids zurück. Der Grund dafür ist, dass die Funktion die Suche
beim ersten passenden Kanalnamen beendet. Beispiel: Eine NC-Datei enthält die
Kanalnamen AI50%+m
(varid 0), AI50%-m
(varid 1):
Der folgende Aufruf liefert die varid = 1:
varid = nc_varid(ncid, "AI50%-m");
Beim Aufruf mit zwei Unterstrichen liefert die Funktion die varid der Variablen
AI50%+m
, also die varid = 0:
varid = nc_varid(ncid, "AI50__m");
Um Probleme mit dem Formelinterpreter zu vermeiden, sollten sich alle Kanalname unterscheiden, auch wenn die Sonderzeichen durch Unterstriche ersetzt würden. Falls die NC-Datei mit UniPlot erzeugt worden ist, werden die Variablen die sich nur durch die Sonderzeichen unterscheiden durchnummeriert. Dabei bleibt der erste Kanal unverändert. Alle folgenden Kanäle, die sich nur durch die Sonderzeichen unterscheiden werden beginnend bei 0 durchnummeriert.
7.3. Eigenschaften von UniPlot-Datendateien (nc2)¶
Das nachträgliche Zufügen oder Entfernen von Attributen oder Kanälen ist bei vielen Messdaten-Dateiformaten nicht möglich oder führt zum Kopieren der ganzen Datei. nc2-Dateien können problemlos nachträglich geändert werden.
Stabilität: Bei den meisten Messdaten-Dateiformaten werden bei Änderungen die Daten direkt in die Datei geschrieben. Wird eine Reihe von Änderungen an den Daten durchgeführt und eine der Änderungen schlägt fehlt (z. B. wegen Netzwerkstörungen, Stromausfall oder Softwarefehlern), ist die Datei fehlerhaft. Bei nc2-Dateien können die Änderungen wieder rückgängig gemacht werden, weil UniPlot-Datendateien Transaktionen verwenden.
Häufig kompaktere Dateien, weil Teile der Datei komprimiert werden.
Keine Größenbeschränkung der Dateien auf 2 oder 4 GB, es sind 1 TB große Dateien mit 2,1 Milliarden Punkten pro Kanal möglich.
7.4. Funktionen¶
Tools |
|
---|---|
NC_AddFiles erzeugt eine neue NC-Datei durch Verketten von mehreren Dateien wobei die Datenrekords der angegebenen Dateien aneinander gehängt werden. Es werden die Daten der Kanäle verkettet, deren Namen übereinstimmen. |
|
NC_Classify klassiert eine Datei in Gruppen. Für jede Gruppe wird ein Indexkanal erzeugen. Der Indexkanal beginnt mit dem Wert 1. Der Wert ist konstant für eine Gruppe. Die zweite Gruppe hat den Wert 2 usw. Falls die Funktion mit mehr als 2 Parametern aufgerufen wird, wird die Datei in Abhängigkeit vom angegebenen Indexkanal in einzelne Dateien aufgetrennt. |
|
NC_CreateMeanCycleFile erzeugt eine NC-Datei mit gemittelten Zyklen. Die zyklischen Daten werden aus einer NC-Datei gelesen. Die nötigen Parameter werden in einem Objekt übergeben. |
|
NC_CreateSampleReduction erzeugt Kanäle mit reduzierter Punktanzahl für die Kanäle, die mehr als 2e6 Punkte enthalten. |
|
NC_DeleteFilteredRecords löscht alle gefilterten Records aus der angegebenen NC-Datei. |
|
NC_Edit öffnet ein Dialogfenster in dem eine UniPlot Datendatei (NC-Datei) bearbeitet werden kann. |
|
NC_ExportData konvertiert netCDF-Dateien (.nc) oder UniPlot-Datendateien (.nc2) in ein anderes Dateiformat. |
|
NC_GetVarAttribs liefert die Kanalattributwerte als Textmatrix. |
|
NC_GetVarNames liefert die Namen der Variablen einer netCDF Datei (NC-Datei). |
|
NC_Interpolation erzeugt eine NC-Datei mit interpolierten Daten. Mit der Funktion können Dateien, die einen Zeitkanal enthalten, auf einen andere Abtastrate interpoliert werden, oder MDF-Dateien, die Daten mit mehreren unterschiedliche Abtastraten enthalten, können auf eine gemeinsame Abtastrate interpoliert werden. |
|
NC_MapInterpolation berechnet durch Interpolation aus Kennfeldern zusätzliche Kanäle in einer netCDF Datei (NC-Datei). |
|
NC_MergeFiles erzeugt eine neue NC-Datei aus den Kanälen mehrerer Dateien. Die Kanäle werden der Datei zugefügt. |
|
nc_convert_units konvertiert die Kanäle einer NC2-Datei in SI-Einheiten oder gebräuchliche Einheiten. |
|
nc_from_obj erzeugt eine netCDF-Datendatei aus einem speziellen UniScript-Objekt (Struktur). |
|
nc_to_obj liest eine netCDF-Datendatei oder eine Untermenge einer netCDF-Datendatei in ein UniScript-Objekt (Struktur). |
Öffnen und Schließen |
|
---|---|
nc_abort verwirft alle Änderungen, die seit dem Öffnen der Datei, seit dem letzten nc_sync an der NC-Datei durchgeführt wurden. |
|
nc_close schließt eine offene NC-Datei. |
|
nc_create erzeugt eine neue UniPlot-Datendatei oder eine netCDF-Datei. |
|
nc_open öffnet eine existierende Datendatei zum Lesen oder Schreiben. |
|
nc_sync schreibt die gepufferten Daten in die Datei. |
Globale Funktionen |
|
---|---|
nc_copy kopiert die Daten einer offenen NC-Datei in eine neue NC-Datei. |
|
nc_endef beendet den Definitions-Modus für eine offene NC-Datei. Die Änderungen werden auf die Festplatte geschrieben. Die Variablen werden mit Füllwerten geschrieben, es sei denn nc_setfill wurde vorher mit dem Argument |
|
nc_fatal_error liefert den Fehlercode des ersten fatalen Fehlers oder den Wert 0, falls kein fataler Fehler aufgetreten ist. |
|
nc_filename erfragt den Dateinamen für eine gegebene ncid. |
|
nc_get_enum_values gibt den Wert des Attributs |
|
nc_get_option erfragt eine Option. |
|
nc_inquire_format erfragt das Format einer offenen NC-Datei. |
|
nc_inquire_mode erfragt den Mode einer offenen Datendatei. |
|
nc_inquire_ndims erfragt die Anzahl der Dimensionen in einer NC-Datei. |
|
nc_inquire_ngatts erfragt die Anzahl der globalen Attribute in einer NC-Datei. |
|
nc_inquire_nvars erfragt die Anzahl der Variablen in einer NC-Datei. |
|
nc_inquire_recdim erfragt die Identifikations-Nummer der Record-Variablen in einer netCDF-Datei. |
|
nc_last_error liefert bei UniPlot-Datendateien (NC2) den zuletzt aufgetretenen Fehler. Falls bei der letzten |
|
nc_redef schaltet eine zum Schreiben offene netCDF-Datei in den Definitionsmodus um. Im Definitionsmodus können Dimensionen, Attribute und Variablen hinzugefügt oder umbenannt oder Attribute gelöscht werden. |
|
nc_set_option setzt eine Option. |
|
nc_seterror_options legt fest wie sich die netCDF-Funktionen bei einem Fehler verhalten sollen. |
|
nc_setfill legt den Füllmode fest. |
|
nc_str_error liefert einen Fehlermeldungstext. |
Dimensionen |
|
---|---|
nc_dimdef fügt einer netCDF-Datei eine neue Dimension hinzu. Die netCDF-Datei muss sich dazu im Definitions-Modus befinden (siehe nc_endef/nc_redef). |
|
nc_dimid gibt die Identifikations-Nummer einer Dimension zurück. |
|
nc_diminq_name erfragt den Namen einer Dimension. |
|
nc_diminq_size erfragt die Größe einer Dimension (Anzahl der Datenpunkte). |
|
nc_dimredim ändert die Größe einer Dimension. Die NC2-Datei muss sich dazu im Definitions-Modus befinden (siehe nc_endef/nc_redef). |
|
nc_dimrename nennt eine Dimension um. |
Variablen |
|
---|---|
nc_makevalidname liefert einen gültigen netCDF Variablennamen für einen gegebenen Namen. |
|
nc_varcopy kopiert die Daten einer Variablen von einer NC-Datei in eine andere NC-Datei. Die Variable muss in beiden Dateien den gleichen Namen und die gleiche Punktzahl haben. |
|
nc_vardef fügt ein neue Variable in die offene netCDF Datei ein. Die Datei muss sich dazu im Definitions-Modus befinden. |
|
nc_vardelete löscht eine Variable. Die Datei darf sich dazu nicht im Definitions-Modus befinden. |
|
nc_varget liest Daten einer Variablen aus einer netCDF-Datei, die sich dazu im Daten-Modus befinden muss. |
|
nc_varget_missing liest Daten einer Variablen aus einer netCDF-Datei. Fehlende Werte werden auf den Wert MISSING_VALUE gesetzt. Die Datei muss sich im Daten-Modus befinden. |
|
nc_varid erfragt die Identifikations-Nummer einer netCDF-Variablen, wobei der Variablen-Name vorgegeben wird. |
|
nc_varinq_changed erfragt den change-counter einer netCDF-Variablen. Bei jeder Änderung an einer Variable ändert sich dieser Wert. |
|
nc_varinq_datatype erfragt den Datentyp einer netCDF-Variablen, wobei die Variable durch eine Identifikations-Nummer vorgegeben ist. |
|
Die nc_varinq_dimids Funktion gibt einen Vektor von Dimensions-Identifikations-Nummern zurück. |
|
nc_varinq_info liefert Informationen zu den Werten eines Kanals (Minimum, Maximum, Monotonie und ob der Kanal fehlende Werte enthält). |
|
nc_varinq_name erfragt den Namen einer netCDF-Variablen, wobei die Identifikations-Nummer vorgegeben wird. |
|
nc_varinq_natts erfragt die Anzahl der Attribute einer Variablen. |
|
nc_varput schreibt Daten in eine netCDF-Variable in eine geöffnete netCDF-Datei, die sich im Daten-Modus befinden muss. |
|
nc_varput_missing schreibt Daten in eine netCDF-Variable in eine geöffnete netCDF-Datei, die sich im Daten-Modus befinden muss. Fehlende Werte müssen den Wert |
|
nc_varput_text schreibt Textdaten in eine netCDF-Variable in eine geöffnete netCDF-Datei, die sich im Daten-Modus befinden muss. |
|
nc_varrename gibt einer netCDF-Variable einen anderen Namen. |
|
nc_varsearch sucht den Index des größten Wertes in varid, der kleiner oder gleich x ist. Die Werte in varid müssen monoton aufsteigend sortiert sein und dürfen keine Missing-Values enthalten. |
Attribute |
|
---|---|
nc_attcopy kopiert ein Attribut in eine andere netCDF-Datei. |
|
nc_attdelete löscht ein Attribut. Die Datei muss sich dazu im Definitions-Modus befinden. |
|
Mit nc_attget können Attributwerte von Variablen erfragt werden. |
|
nc_attinq_datatype erfragt den Datentyp eines Attributs einer netCDF-Variablen. |
|
nc_attinq_len erfragt die Anzahl der Datenpunkte eines Attributs. Falls das Attribute vom Datentyp |
|
nc_attname erfragt den Namen eines Attributs. |
|
nc_attput fügt einer Variablen ein Attribut hinzu oder ändert ein vorhandenes Attribut. |
|
nc_attrename nennt ein Attribut um. |
7.5. Standard-Attribute¶
In UniPlot-Datendateien, können neben den Kanälen auch Attribute (Stammdaten) in der Form
AttributName = AttributWert
geschrieben werden.
Es wird dabei zwischen globalen Attributen (Attribute die sich auf die gesamte Datei beziehen) und Kanal-Attributen (Attribute die sich nur auf einen Kanal beziehen) unterschieden.
Bei den Attributnamen wird Groß-/Kleinschreibung unterschieden.
7.5.1. Globale Attribute¶
Attribut-Name |
Datentyp |
Bedeutung |
---|---|---|
Origin |
char |
Name aus der die Datendatei entstanden ist, z. B. „c:/test.xls“. |
Source |
char |
Ersteller des Import-Filters, z.B. „STS Software and Testing Solutions GmbH (www.uniplot.com)“ |
Creator |
char |
Name des Import-Filters, dem Namen kann eine Versionsnummer folgen. Z. B. UniPlot Pasy 1.0. |
Date |
char |
Datum |
Time |
char |
Zeit |
Range |
int[2] |
|
_nc_dl_driver, _nc_dl_driverinfo, _nc_dl_source, _nc_dl_loadcount |
char und int |
siehe Verzögerter Import. |
_nc_hasgroups |
Zahl |
Siehe Kanalattribut |
7.5.2. Kanal-Attribute¶
Attribut-Name |
Datentyp |
Bedeutung |
---|---|---|
title |
char |
|
long_name |
char |
|
units |
char |
Physikalische Einheit, z. B. Nm |
scale_factor |
double |
Der Kanal wird über die Formel x * scale_factor + add_offset transformiert |
add_offset |
double |
Siehe Attribut scale_factor. |
missing_value |
wie Kanal |
Der Datentyp des Attributs |
Type |
char |
Wert ist entweder „Time Channel“ oder „Data Channel“. |
datatype |
char |
Mögliche Werte: „date“, „time“, „datetime“ |
C_format |
char |
Formatzeichenkette, siehe printf. |
__Delete__ |
int |
Bedeutet, dass der Kanal zum Löschen markiert ist: Wert 0 oder 1 |
Description |
char |
Beschreibung des Kanals |
Comment |
char |
Kommentar zum Kanal |
_FillValue |
wie Kanal |
|
_formula_text |
char |
|
_formula_description |
char |
|
_formula_comment |
char |
|
_formula_onlyif |
char |
|
_channel_type |
char |
„formula“/“formula_not_registered“ |
valid_range |
wie Kanal |
|
_nc_enum |
char |
Das Attribut kann beliebig viele Wert/Text-Paare enthalten. Die einzelnen
Elemente müssen durch Oder-Zeichen getrennt sein. Beispiel:
|
XStart_XDelta |
double[2] |
Startwert und Delta, wenn der Kanal als t/y-Kurve geladen wird. |
nc_min, nc_max, nc_monotone, nc_has_missings, nc_change_counter |
double |
Siehe nc_varinq_info. |
_nc_dl_loaded, _nc_dl_loadinfo |
int |
siehe Verzögerter Import. |
_nc_group |
char |
Enthält einen durch Schrägstriche (slash |
7.6. Gruppieren von Kanälen (Baumstruktur)¶
Die Kanäle, die in in einer Gruppe enthalten sein sollen, erhalten das Attribut
_nc_group
(Datentyp = NC_CHAR), z. B.
_nc_group = "Angle Data/Heat Release"
oder _nc_group = "G1"
. Damit die
Gruppierung angezeigt wird, muss noch das globale Attribut
_nc_hasgroups = 1
(NC_LONG) erzeugt werden:
nc_attput(ncid, -1, "_nc_hasgroups", NC_BYTE, 1);
nc_attput(ncid, varid, "_nc_group", NC_CHAR, "G1");
Damit die Gruppierung im Brower angezeigt wird muss der Benutzer den
entsprechenden Schalter im Browser (Baumstruktur) drücken.
Die Funktion Browser_ShowTreeStructure() schaltet die Ansicht im Browser ein bzw.
aus. Der Return-Wert 1 bedeutet, dass eingeschaltet wurde. Der Zustand wird in
der globalen Variablen _g().nc_use_groups
gespeichert.
7.7. Verzögerter Import¶
Wenn die Option „Verzögertes Importieren von Datenkanälen“ eingeschaltet ist (siehe Extras=>Weitere Optionen, Gruppe: Datenimport und Datenbrowser), werden nicht alle Kanäle sofort aus der Quelldatei in die nc2-Datei kopiert, sondern die Kanäle werden erst bei Bedarf geladen. Enthält eine Messung z. B. 400 Kanäle, der Anwender ist aber nur an 8 Kanälen interessiert, wird der Import fast 50 mal schneller ausgeführt.
Globale Attribute
_nc_dl_driver = "rs_usdata"
_nc_dl_driverinfo = "TDM"
_nc_dl_source = "d:\\test.tdm"
_nc_dl_loadcount = 0
Kanal-Attribute
_nc_dl_loaded = 0
_nc_dl_loadinfo = "5,2,amp"
context = _XXX_DL_open(ncid, ssSource)
bool = _XXX_DL_load_channel(context, varid, ssInfo)
_XXX_DL_close(context)
Beispiel:
def _TDM_DL_open(ncid, ssSource)
{
ctx = [.];
hTDMFile = _DDC_OpenFileEx(ssSource, "", TRUE /* READONLY */);
if (type(hTDMFile) != "error") {
ctx.hTDMFile = hTDMFile;
ctx.ncid = ncid;
ctx.ssOurce = ssSource;
return ctx;
}
return 0;
}
def _TDM_DL_load_channel(ctx, varid, ssInfo)
{
sv = strtok(ssInfo, ",");
iGroup = strtol(sv[1]);
iChannel = strtol(sv[2]);
oGroups = _DDC_GetChannelGroups(ctx.hTDMFile);
oChannels = _DDC_GetChannels(oGroups[iGroup]);
nBlocksize = 10000;
nStart = 0;
nRead = nBlocksize;
while (nRead >= nBlocksize) {
rvData = _DDC_GetDataValues(oChannels[iChannel], nStart, nBlocksize);
if (type(rvData) == "error") {
return FALSE;
}
nRead = len(rvData);
r = nc_varput(ctx.ncid, varid, nStart, nRead, rvData);
nStart = nStart + nRead;
}
return TRUE;
}
def _TDM_DL_close(ctx)
{
_DDC_CloseFile(ctx.hTDMFile);
}
7.8. Beispiel¶
Die folgende Funktion erzeugt eine nc-Datei. Die Daten werden in diesem Beispiel als String-Matrix (smData) übergeben:
def NC_WriteSimpleNCFile(ssFileName, ssNetCDFName, svChanName, svUnits, ...
rvDataType, smData, ssCreator)
{
nCols = nc(smData);
nRows = nr(smData);
ncid = nc_create(ssNetCDFName);
if (ncid == -1) {
MessageBox(sprintf(_s("Cannot create file %s - Is file already open?"), ..
ssNetCDFName), "ICONSTOP");
return "#IMPORTERROR#";
}
dimids = nc_dimdef(ncid, "nRows", nRows);
// Globale Attribute:
nc_attput(ncid, -1, "Origin", NC_CHAR, _StandardFileName(ssFileName));
nc_attput(ncid, -1, "Source", NC_CHAR, "STS Software and Testing Solutions GmbH");
nc_attput(ncid, -1, "Creator", NC_CHAR, ssCreator);
rvRange = [1, nRows];
nc_attput(ncid, -1, "Range", NC_LONG, rvRange);
nc_attput(ncid, -1, "Reference", NC_CHAR, "");
nc_attput(ncid, -1, "Date", NC_CHAR, sum(date()));
nc_attput(ncid, -1, "Time", NC_CHAR, sum(time()));
nc_attput(ncid, -1, "Title", NC_CHAR, "");
nc_attput(ncid, -1, "Comment1", NC_CHAR, "");
nc_attput(ncid, -1, "Comment2", NC_CHAR, "");
nc_attput(ncid, -1, "Comment3", NC_CHAR, "");
for (i in 1:nCols) {
if (_NC_DATETIME == rvDataType[i]) {
varid = nc_vardef(ncid, svChanName[i], NC_DOUBLE, dimids);
} else {
varid = nc_vardef(ncid, svChanName[i], rvDataType[i], dimids);
}
nc_attput(ncid, varid, "title", NC_CHAR, svChanName[i]);
nc_attput(ncid, varid, "units", NC_CHAR, svUnits[i]);
nc_attput(ncid, varid, "long_name", NC_CHAR, ..
svChanName[i] + " [" + svUnits[i] + "]");
nc_attput(ncid, varid, "scale_factor", NC_DOUBLE, 1.0);
nc_attput(ncid, varid, "add_offset", NC_DOUBLE, 0.0);
nc_attput(ncid, varid, "Description", NC_CHAR, "");
nc_attput(ncid, varid, "Comment", NC_CHAR, "");
nc_attput(ncid, varid, "ChanType", NC_CHAR, "DateTime");
}
nc_setfill(ncid, NC_NOFILL);
nc_endef(ncid);
for (i in 1:nCols) {
if (rvDataType[i] == 100) {
rvData = DT_ParseDateTime(smData[;i]);
} else {
rvData = strtod(smData[;i]);
}
nc_varput(ncid, i-1, 0, nRows, rvData);
}
nc_close(ncid);
return ssNetCDFName;
}
7.9. Copyright netCDF¶
Siehe netCDF und http://www.unidata.ucar.edu/software/netcdf/
Siehe auch
Überblick netCDF-Browser, Standard-Attribute, Überblick Dateien, UniScript-Funktionen-Überblick, Programm-Grenzen, netCDF-SDK
id-1707929