DIAdem

cancel
Showing results for 
Search instead for 
Did you mean: 

Daten aus tdm-Dateien extrahieren

Ich habe ein kleines Script geschrieben, das die Daten aus dem *.tdm File ausliest. Ich habe aber noch ein Problem mit den deutschen Umlauten (siehe Screenshoot). Wenn ich die tdm Datei in einem Editor öffne, sind dort die Begriffe richtig geschrieben.
Download All
0 Kudos
Message 1 of 12
(6,259 Views)
Hallo Herrman!
 
Grund für das Verhalten ist das die TDM-Datei in Unicode gespeichert ist. Beim Lesen in einen ANSI String kann es dann zu den Problemen kommen.
 
Das direkte, zeilenweise Lesen einer XML-Datei, was eine TDM im Grunde ist, kann darüberhinaus zu Problemen führen, da die Datei auch mehrere Tags in einer Zeile haben darf (siehe TDR Dateien). Dazu sollte man einen geeigneten XML-Parser verwenden. Wenn man das noch nie gemacht hat ist das ein wenig Neuland und nicht ganz so intuitiv wie das zilenweise lesen einer ASCII-Datei.
 
Um nun in Richtung einer Lösung zu kommen die Frage: Mit welcher Version von DIAdem arbeitest du?
 
Matthias
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 2 of 12
(6,241 Views)
Ich arbeite mit Diadem 10.0, Windows2000 SP4
0 Kudos
Message 3 of 12
(6,237 Views)
Hallo Herrmann!
 
Als Übergangslösung bis zu DIAdem 10.1 bleibt nur die Datei über einen XML Parser zu lesen. Der kümmert sich dann auch um die Zeichenkodierung und erspart auch ein wenig Parserarbeit. Das folgende Script ist aber wirklich nur eine Notlösung da es z.B. nicht überprüft ob die Registercomments der Wurzel zugeordnet sind:
Option Explicit
 
Dim oXML
Dim oRegisterComments
Dim oRegisterComment
Dim oNodeName
Dim oNodeDescription
 
' TDM als XML laden
Set oXML = CreateObject("MSXML.DOMDocument")
 
Call oXML.load( DateiName )
 
' registercomments über XPath ermitteln
Set oRegisterComments = oXML.selectNodes("//usi:tdm/usi:data/registercomment")
 
For Each oRegisterComment In oRegisterComments
 ' alle registercomment durchgehen und Namen/Description ermitteln und anzeigen
  Set oNodeName        = oRegisterComment.selectSingleNode("name")
  Set oNodeDescription = oRegisterComment.selectSingleNode("description")
  
  If (Not oNodeName Is Nothing) And (Not oNodeDescription Is Nothing) Then
   MsgBox oNodeName.Text & " : " & oNodeDescription.Text
  End If
Next
Matthias
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 4 of 12
(6,225 Views)
Hallo Herrmann!
 
Ich habe vergessen zu erwähnen das die Lösung mehr auf gute Lesbarkeit als auf Performance getrimmt ist. Wenn man viele Dateien zu bearbeiten hat kann ein etwas anderer Ansatz noch Geschwindigkeit bringen.
 
Matthias
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 5 of 12
(6,222 Views)
Kann ich das so verstehen, dass es unter Diadem10.1 eine bessere Möglichkeit gibt. Wir bekommen bald über unseren Wartungsverrag die neue Version.
0 Kudos
Message 6 of 12
(6,212 Views)
Hallo Herrman!
 
Die Antwort von Brad in 'http://forums.ni.com/ni/board/message?board.id=60&message.id=5334' habe ich so verstanden.
 
Es soll da den 'DataFileHeaderAccess()' Befehl geben. Die 10.1er Hilfe schreibt dazu:
 

DataFileHeaderAccess(DataFileName,FileImportFilter,ReadOnly)

Erzeugt ein DataFileHeader-Objekt zum Zugriff auf eine TDM-Headerdatei.

Syntax

DataFileHeaderAccess(DataFileName,FileImportFilter,ReadOnly)

Parameter

DataFileName String. Bestimmt den Namen einer Datei mit Erweiterung und Pfad.
FileImportFilter String. Bestimmt das Ladeverfahren.
ReadOnly Bool. Bestimmt, ob Sie die Datei nur zum Lesen (TRUE) oder auch zum Schreiben (FALSE) öffnen.

Beispiel

Das folgende Beispiel erzeugt ein DataFileHeader-Objekt und gibt den Namen des zweiten Kanals der ersten Gruppe aus:

Dim oMyDataFileHeader, oMyChnName
Set oMyDataFileHeader = DataFileHeaderAccess(DataDrvLibr & "Example.tdm" ,"TDM", False)
oMyChnName = oMyDataFileHeader.ChnNameGet(1,2)
MsgBox oMyChnName
 
Matthias
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 7 of 12
(6,203 Views)
Hallo Herrman!
 
Es sieht so aus das die Datensdatzkommentare in TDM Dateien in DIAdem 10.1 irgendwie hinten runtergefallen sind. Weder das oben beschriebene Verfahren zum skriptbasierten Lesen noch in der DIAdem Oberfläche kann ich die wiederfinden. Habe gerade wenig Zeit, werde das aber sobald wie möglich mal mit NI Hilfe versuchen wiederzufinden.
 
Matthias
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 8 of 12
(6,196 Views)
Hallo Matthias,
das wäre aber sehr schlecht. Alle unsere Messprogramme nutzen die Datensatzkommentare, um wichtige Informationen zu den Messungen zu speichern. Wenn diese Kommentare nicht mehr vorhanden sind, können wir die Version 10.1 vorläufig nicht brauchen.
0 Kudos
Message 9 of 12
(6,185 Views)
Hallo Herrman!
 
Ich versuche mal meine Erkenntnisse in Worte zu fassen (alles bezogen auf DIAdem 10.1):
  • beim Laden von TDM Dateien werden die Datensatzkommentare immer noch in die 'DataSetcomment'/'DataSetCommentN' Variablen übernommen
  • beim Laden von DAT Dateien werden die Datensatzkommentare zusätzlich an die zugehörige Kanalgruppe als Zusatzeigenschaften gehängt
  • beim Laden von TDM Dateien passiert dies nicht
  • die neue Funktion 'DataFileHeaderAccess' gibt NICHT die Möglichkeit auf die Datensatzkommentare zuzugreifen

Ich hoffe alle Klarheiten beseitigt zu haben. Ich erkenne momentan keinen signifikanten Unterschied zwischen 10.0 und 10.1 der einen Einsatz von 10.1 verbieten würde. Die neuen Fähigkeiten in 10.1 berücksichtigen aber m.E. die Datensatzkommentare in TDM Dateien nur rudimentär.

Matthias
 
Matthias Alleweldt
Project Engineer / Projektingenieur
Twigeater?  
0 Kudos
Message 10 of 12
(6,177 Views)