Hallo liebes Forum,
hier wurde mir als passiver Leser schon öfter geholfen, leider finde ich zu meinem aktuellen Problem keine entsprechenden Threads.
Es geht um das Einlesen größerer Textdateien mit vielen Werten pro Zeile, die aber nicht mit Tab oder ähnlichem getrennt sind, sondern einfach in feste Bereiche eingeteilt sind. Ich weiß das könnte jetzt nichts so verständlich sein, deswegen hier ein Beispiel:
Die Zeilen der Datei sehen so aus: 3459.3450.875789.2345
Mit der entsprechenden Maske wird das draus: 34 59.3450 (0).875 78 9.2345
D.h. der erste Werte steht an Position 1-2, der nächste an 3-9, dann 10-13 usw...
Das Ganze wird hoffentlich auch noch mal ersichtlich wenn man sich die beiden angehängten Dateien anschaut.
Meine bisherigen Versuche Arrays mit den entsprechenden Werten zu erstellen waren leider nicht erfolgreich. Wie ich Textdateien zeilenweise einlese weiß ich, nur was ich dann bräuchte wäre ein Befehl der die Werte an Position 1-2 in ein Array schreibt, dann die Werte bei 3-9 in ein anderes Array usw. Vllt muss man es auch ganz anders angehen...
Hoffe jemand kann mir dabei helfen. Vielen Dank schon mal.
Hi Jens,
danke für die schnelle und zutreffende Antwort. Danach hab ich gesucht.
Irgendwie mach ich aber noch was falsch, da in den Arrays jeweils immer nur das erste Element steht. Ob ich zeilenweise einlese oder nicht macht keinen Unterschied. Vielleicht kann da jmd nochmals drüberschauen.
[
attachment=40422]
Lies mal zeilenweise ein (also Rechtsklick ->Read Lines), und die weitere Behandlung gehört dann in eine For-Schleife:
[
attachment=40425]
Gruß, Jens
Danke nochmals Jens.
War doch ziemlich straight forward, man braucht nur die richtigen Befehle.
[
attachment=40427]
Die Verwendung von solch langweiligen gleichförmigen Strickmustern ist immer suboptimal. Labview ist speziell daraufhin konzipiert, das sich so etwas immer vermeiden läßt.
In Deinem Fall geht es einfacher so:
[
attachment=40433]
Hallo Lucki,
wenn man sich die Text-Datei weiter oben anschaut, befürchte ich doch einige Fehlermeldungen bei deinem Vorschlag...
(fehlende Trennzeichen zwischen Spalten, plötzlich mal Buchstaben statt Zahlen)
Fortsetzung:
Zitat:Die Zeilen der Datei sehen so aus: 3459.3450.875789.2345
Mit der entsprechenden Maske wird das draus: 34 59.3450 (0).875 78 9.2345
Wer auch immer sich einen solchen Quatsch als Dateiformat ausgedacht hat...
Oder geht's hier um
security by obscurity?
@Lucki: Danke für die schöne Lösung. Ist erstaunlich dass LV die zusammenhängenden Zahlen richtig interpretiert (vor allem auch bei "-.076"). Für meine Zwecke ist das vollkommen ausreichend und zweckmäßig. Allerdings gibt es tatsächlich einen Fehler, wenn die Anzahl der Schleifendurchläufe erhöht wird, da zwischendrin ein Buchstabe vorkommt (bei anderen Datensätzen durchaus öfter der Fall). Aber wie gesagt, da ich nicht alles auslesen muss, kann ich damit sehr gut was anfangen.
@Gerd: Warum genau dieses Dateiformat gewählt wurde, weiß ich auch nicht, aber mit Security hat es nichts zu tun. Bei Interesse kannst du gerne mal unter folgendem Link vorbeischauen:
http://www.cfa.harvard.edu/hitran/
Es handelt sich dabei um spektroskopische Daten für die Absorption von Molekülen.
(28.06.2012 08:53 )GerdW schrieb: [ -> ]wenn man sich die Text-Datei weiter oben anschaut, befürchte ich doch einige Fehlermeldungen bei deinem Vorschlag...
Nach bestandenem Praxistest sollte man aber, statt die Welt mit Befürchtungen zu verunsichern, sich lieber überlegen, warum es funktioniert.
Es funktioniert, weil das VI "In String suchen" anders funktioniert als das VI "Tabellenstring nach Array" - dort gelten deine Befürchtungen voll.
Das VI ignoriert führende Leerzeichen und sucht die erste Gleit- oder Fixkommazahl. Dies erste Zahl lautet im Beispiel "3459.3450". Der Restsring lautet ".875789.2345". Die zweite gefundene Zahl des Reststrings lautet ".875789", die dritte ensprechend ".2345". Da gibt es absolut nix, was instabil ist oder von dem VI auch anders interpretiert werden könnte.
[
attachment=40452]
@Wator
Du musst genau sagen was Du haben willst, es gibt da Differenzen:
Erst wolltes Du einen String (?) , in dem das R weiterhin vorkommt, und dann lieferst Du ein Beispiel, in dem nur die ersten 9 String-Zahlen der Zeile nach DBL konvertiert werden.
Sage genau, was Du willst, und es wird geliefert
![Big Grin Big Grin](images/smilies/biggrin.gif)
Hallo Lucki,
wenn ich mir das Zitat anschaue:
Zitat:Die Zeilen der Datei sehen so aus: 3459.3450.875789.2345
Mit der entsprechenden Maske wird das draus: 34 59.3450 (0).875 78 9.2345
dann hat auch die ScanFromString-Variante Probleme, aus 3459.345 die zwei Zahlen 34 und 59.345 zu parsen - zumindest bei einem Formatstring von "%f". Ebenso die Trennung von ".875789.2345" in
drei verschiedene Werte...
Du nennst es "Befürchtung"/"Verunsicherung", ich nenne es Widerspruch zwischen Aufgabenstellung und präsentierter Lösung...