LabVIEWForum.de - Daten blockweise aus .txt Datei extrahieren

LabVIEWForum.de

Normale Version: Daten blockweise aus .txt Datei extrahieren
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo LabVIEW Freunde,

ich habe folgendes Problem zu dem mir jeglicher Ansatz fehlt.
Ich benutze die Studentenversion 8.

Ich habe eine .txt Datei in der 7 Spalten sind. In diesen 7 Spalten sind Messwerte von 6 Kanälen abgelegt. Jede Zeile bedeutet ein Messwert alle 200ms. Die Messwerte oder Kanäle sind durch TAB voneinander getrennt. In der 7. Spalte ist eine Kommentarspalte in der unregelmäßig Kommentare auftauchen welche mit # beginnen.
Die Schwierigkeit besteht nun in folgendem.
Ich möchte gerne die Textdatei auslesen und immer wenn ein Kommentar bzw. ein # Zeichen in der Spalte 7 erscheint sollen 50 Zeilen vor dieser Zeile mit dem # Zeichen und 100 Zeilen nach dieser Zeile alle 7 Spalten in eine Tabelle oder Array geschrieben werden, so dass ich mit diesen dann weiter Rechnen oder ähnliches kann.
Sprich ich möchte eine Datenextraktion blockweise durchführen lassen.
Kann mir jemand bei diesem Problem eine Hilfestellung geben? Angel_not
Ich würde mich sehr über eure Hilfe freuen,

Viele Grüße und besten Dank im Voraus,
thomas

PS: im Anhang ein Beispiel der von mir verwendeten Daten in der .txt Datei.
Hallo Otti,

Vorgehensweise:
- die Datei mittels ReadSpreadsheetFile (als 2D-Stringarray) einlesen
- in der 7. Spalte nach Kommentaren suchen
- mit den gefundenen Indizes rechnen (x-50) und dann aus dem Gesamtarray mittels ArraySubset ab Zeile "x-50" 150 Zeilen "ausschneiden"

Probier das mal selbst. Wenn du damit dann Probleme hast, hängst du dein VI an und wir schauen drüber... Smile
vielen Dank für die schnelle hilfe, ich werde das versuchen umzusetzen und melde dann die fortschritte Big Grin

nochmals besten dank und schönen abend!
Offtopic2
Ist die Shift-Taste deiner Tastatur defekt? Dann bitte reparieren.
Beiträge im SMS-Stil (alles klein geschrieben) sind im LVF ungern gesehen (vgl. LVF-Regeln).

Danke, Jens
Wenn die Datei sehr groß ist, dann sollte man sich überlegen, ob man die ganze Datei ins RAM lädt. Die Alternative wäre, mittels zeilenweisem Einlesen nach der Zeile mit Kommentar zu suchen. Das ist aber insgesamt etwas aufwändiger als die von Gerd vorgeschlagene Lösung.
Hier eine Lösung, bei der allerdings nur die erste Fundstelle ausgewertet wird.

[attachment=41263] [attachment=41264]

[attachment=41272]
Lieber Lucki:
Danke für deinen Lösungsvorschlag. Ich werde gleich mal versuchen ob ich damit zurecht komme.


Lieber Gerd:
Ich habe heute versucht deine Lösung umzusetzen. Leider ist es mir nicht ganz gelungen. Ich habe im Angang einmal das bisgerige VI eingefügt. Vielleicht kannst du, oder auch Lucki einen Blick drauf werfen.
Die aktuelle Lösung ist eine Kombination aus dem VI "Read Text" und "Suchen in einem 2D Array"(dieses vi habe ich von der NI Seite).
Wenn ich nach # Suche oder auch nach anderen Zeichen, egal ob Zahl oder Buchstabe kommt immer kein Ergebnis (-1). Was mache ich falsch?

So lange ich da nicht weiter komme, habe ich das mit dem Ausschneiden noch ganicht anfangen können...Undecided

Liebe Grüße und ich freue mich sehr über eure Hilfsbereitschaft.
otti
Hallo Otti,

mal ein Vorschlag:
[attachment=41271]

- Das ReadFromSpreadsheetFile kann in deiner alten LV-Version nur Zahlenarrays ausgeben, Stringarrays kamen erst später hinzu, nicht wundern.
- Die Such-Schleife schaut momentan einfach nach nicht-leeren Feldern der 7.Spalte und packt deren Indizes in ein Array. Schau mal, wie du damit weitermachen kannst...
Mein obiger Vorschlag funktioniert nicht mit LV8, weil es da die Queue-Funktion "verlustbehaftet einfügen" noch nicht gab. Habe das geändert und das Vi oben angehängt.
Es gibt ja in der Datei viele Fundstellen mit # in der Zeile. Was soll denn da insgesamt geschehen? Sollen entsprechend viele Subdateien angelegt werden oder wie soll das dann funktionieren?

Hier noch Variante zum Vorschlag nach Gerd:
[attachment=41275]
[attachment=41273]
Hallo Gerd und Lucki,

das mit dem String und ReadFromSpreadsheetFile habe ich dann germerkt. Dachte erst das muss doch auch mit String gehen, aber ist klar wenn es das in Version 8 noch nicht gab.

Ich habe jetzt, dank euer UnterstüzungSmile, eine Lösung hin bekommen mit der ich erstmal weiter machen kann. Schaut doch bitte einmal ob ihr das auch so gemacht hättet.

Der Sinn soll folgender sein.
Ich messe an 6 Punkten Kontrationskräfte über einen Zeitraum von ca. 8h fortlaufend. Jede Spalte stellt dabei einen Messkanal dar. Der Abstand zwischen den Messwerten beträgt 200ms. In während den 8h führe ich verschiedene Tests durch welche ich druch Kommentare (das ist immer das nach dem # Zeichen) kennzeichne um sie später wieder zu finden.
In der Auswertung soll es jetzt so weiter gehen. Ursprünglich sollte es so sein, dass das Progamm die Blöcke nach der Fundstelle ausschneidet und entweder in eine Tabelle oder wieder in eine Text Datei schreibt und ich diese dann ins Excel lesen kann.
Mittlerweile denke ich, vielleicht kann ich aber auch das was ich im Excel mit den Messwerten vor hatte auch im LabVIEW machen. Es sollen bspw. die Daten vor und nach dem Kommentar bewertet werden, wie zB. Max und Min und dann könnte es mir die Messwerte noch in einer Grafik darstellen.

Im Anhang erstmal der derzeitige Stand.

In dieser Woche bekomme ich LabVIEW 11 und DIAdem Smile

Nochmals vielen Dank für euer Hilfe, ich würde erstmal weiter basteln und mich gern ggf. noch mal bei Fragen melden...

Liebe Grüße,
Otti
Referenz-URLs