LabVIEWForum.de
Unflatten from String in C - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: Unflatten from String in C (/Thread-Unflatten-from-String-in-C)

Seiten: 1 2


Unflatten from String in C - dalb - 14.06.2008 19:11

Das Problem ist, dass die Daten auf Messrechnern über LabVIEW aufgenommen werden und abgespeichert werden und dann irgendwann mit Matlab, das auf dem Server installiert ist, analysiert werden.


Unflatten from String in C - dc6xs - 14.06.2008 19:23

' schrieb:Das Problem ist, dass die Daten auf Messrechnern über LabVIEW aufgenommen werden und abgespeichert werden und dann irgendwann mit Matlab, das auf dem Server installiert ist, analysiert werden.

Irgendwie stört mich das irgendwann gerade etwas..
Für solche Fälle beitet sich doch eine Datenbank auf dem Server, auf dem auch Matlab läuft an..
Also Daten per LV über SQL und Netzwerk an den DB-Server, der legts ab und Matlab kann sich die Daten dort dann holen.

Oder halt aufm LV-Rechner stündlich/täglich/wöchentlich eine neue Datei anlegen und die nach dem Speichern dann auf den Server übertragen.

BTW: Sowohl LV als auch Matlab können sehr gut mit CVS-Daten umgehen, also warum nicht auf ein einfaches Textfile ausweichen?

Aber hättest Du das gleich erzählt, dann hättest den ganzen Umweg über Unflatten from String fast sparen können..


Unflatten from String in C - dalb - 14.06.2008 19:51

' schrieb:Irgendwie stört mich das irgendwann gerade etwas..
Für solche Fälle beitet sich doch eine Datenbank auf dem Server, auf dem auch Matlab läuft an..
Also Daten per LV über SQL und Netzwerk an den DB-Server, der legts ab und Matlab kann sich die Daten dort dann holen.

Oder halt aufm LV-Rechner stündlich/täglich/wöchentlich eine neue Datei anlegen und die nach dem Speichern dann auf den Server übertragen.

BTW: Sowohl LV als auch Matlab können sehr gut mit CVS-Daten umgehen, also warum nicht auf ein einfaches Textfile ausweichen?

Aber hättest Du das gleich erzählt, dann hättest den ganzen Umweg über Unflatten from String fast sparen können..

Es liegen leider schon viele Header Files in diesem Format vor. Die meisten Header liegen auch in einem schönen Format vor, ähnlich einer ini Datei, aber aus irgendwelchen Gründen muss der Header manchmal geflattet werden. Ich habe die LabVIEW Anwendung nicht gemacht. Ich habe jetzt nur diese Daten und soll diese in MAtlab analysieren.


Unflatten from String in C - rolfk - 16.06.2008 07:41

' schrieb:Ich habe leider immer noch keine Ahnung wie ich vorgehen soll.

Die Daten bestehen immer aus einem String gefolgt von einem Value. Aber da die Strings und auch die Values wohl kaum die gleiche Länge haben und auch kein Trennzeichen eingefügt ist, weiß ich nicht wie ich entscheiden soll, wann ich was als String und wann als Value interpretieren soll. Den DAtentyp Value verstehe ich sowieso noch nicht so ganz. ISt da noch irgendwo versteckt welcher Datentyp das wirklcih ist?

So sehen meine Daten aus, die ich zu interpretieren habe: Start Position (µm)�*@P�3�6@A1x�6@A1y�6@A1z11End Position (µm)�4@P�3�6@A1x�6@A1y�6@A1z1B

LEtztendlich benötige ich die Daten in Matlab. ICh glaube der Umweg über C ist gar nicht nötig.

Also im Prinzip gilt was ich schon gesagt habe. Für Strings und Arrays fügt Flatten vor den Daten einen 32 bit int hinzu der angibt wieviele Elemente folgen. An sich recht einfach ausser dass Flatten default auch noch alles auf Big Endian standardisiert.

Was Du mit Value meinst ist mir nicht deutlich. Entweder steht dort ein Skalar (double, single, integer) und dann ist es sehr einfach, ein Array (auch nicht viel schwiereiger siehe open), oder eine Variant (und dann hast Du eigentlich Pech gehabt). Zwar liesse sich das Variant Format in einem Flattened String wohl auch noch herausfinden aber das ist einfach sinnlos viel Arbeit für nichts. Da würde ich noch einfacher ein kleines LabVIEW Tool schreiben das die Daten mit Unflatten wieder einliesst und sie anschliessend in ein CSV oder ähnliches Textformat übersetzt. Kannst Du von Matlab sicher als Command Line Tool ausführen.

Am Besten wäre halt schone eine richtige Datenbank gewesen aber das ist ja scheinbar leider guter Rat der zu spät kommt.

Rolf Kalbermatter


Unflatten from String in C - dalb - 16.06.2008 13:24

Wir fangen jetzt erst an Matlab zu verwenden und werden wohl langsam bei vielen Anwendungen zu Matlab wechseln.


Ich kann mein Problem weiter eingrenzen:

Die Dateien, die ich ich Matlab einlesen möchte werden über WriteKey (string) geschrieben. Nur die Values werden dabei geflattet. Die Values sind aber vorher Variant, wobei ich eigentlich nicht verstehe warum, da es sich eigentlich nur um Fließkommazahlen handelt soweit ich das überblicken kann.

Ich habe mir jetzt folgendens überlegt: Ich lese alles ein und durchsuche den String nach den einzelnen Keys. Dann caste ich ab der Stelle nach dem Key. Dazu muss ich allerdings wissen wieviele Byte das Value hat. Steht jetzt in den ersten 4 Byte die Länge? Steht noch etwas über den Datentyp?

Hier ein Ausschnitt aus so einer Datei:

FIFO Settings="16Ü14D@P82†@ñ10FIFOSettings.ctt2RP5ª@P712@9CBinning (ms) @61AExternal Trigger Condition14@6FStop Condition:10@AAStop Count1A@715Buffer Size (Photons)14@6ENo of Channels14@2FExt Latch DelayBMeasurementf@P5C@66Module14@2EADC Resolution12@2CDither Range14@2FCount Increment16@210Macro Time Clock3ADCh@P418@912SYNC ZC Level (mV)16@211SYNC Freq Divider16@911SYNC Holdoff (ns)18@913SYNC Threshold (mV)4SYNCn@P514@9ETAC Range (ns)E@28TAC Gain14@9ETAC Offset (%)16@911TAC Limit Low (%)18@912TAC Limit High (%)3TACf@P418@912CFD Limit Low (mV)18@913CFD Limit High (mV)16@911CFD ZC Level (mV)16@910CFD Holdoff (ns)3CFD19FIFO Settings (output)[0]2†@ñ10FIFOSettings.ctt2RP5ª@P712@9

Gruß