' schrieb:Hallo,
ich hätte Erklärungsbedarf zu dem von Lucki geposteten VIs, die Zeilenweise einlesen. Ich verstehe folgendes:
- Es wird eine Zeile aus einer Textdatei eingelsen und an die SChleife übergeben.
- In der SChleife sollte dann ja bei jedem Durchgang eine neue Zeile eingelesen werden, solange bis ein Fehler ausgegeben wird, dann ist keine Zeile mehr da und es wird abgebrochen.
Was genau macht der Initialisierungspunkt und der Rückkopplungsknoten in diesem Zusammenhang? Damit wird doch wohl rgendwie sichergestellt, dass immer eine neue Zeile eingelsen wird oder wie? Ich würde mich um eine genaue Erklärung freuen.
Ja, ich versuchs mal zu erklären.
Das Problem ist das: Die Fehlermeldung beim zeilenweisen Einlesen besagt nicht: Bitte keine neuen Zeilen mehr einlesen, denn das war jetzt die letzte Zeile. Sondern sie besagt leider: Ätsch, Pech gehabt, die Zeile die Du lesen wolltest. gibt es gar nicht, die letzte Zeile hattest Du bereits gelesen. (Oder siezt NI die LabVIEW-Anwender?).
Nehmen wir den einfachsten Fall. daß die Datei nur aus einer einzigen Zeile besteht
1. Variante: ohne das Schieberegister.
Die erste (und einzige Zeile) wird eingelesen und fehlerfrei abgearbeitet.
Der Versuch, eine zweite Zeile einzulesen, führt zu einer Fehlermeldung und verursacht den Schleifenabbruch. Der Haken an der Sache ist nur: Vor dem Abbruch wir noch das volle Programm der Stringbehandlung mit der gar nicht existierenden Stringzeile abgearbeitet. Ich weiß jetzt nicht, ob das Programm dann aussteigt oder ob nur ein fehlerhafter 2ter Punkt dem xy-Grachen angehängt wird. Man wäre geneigt, einen Case zu setzen, so daß im Fehlerfall die Stringverarbeitung nicht erfolgt. Hat aber trotzdem den Haken, daß ich dem Graphen wegen der Indexierung zunächst mal einen zweiten Punkt übergeben muß. Den könnte ich löschen, ist aber insgesamt dann umständlicher als mit dem Schieberegister.
2. Variante: Mit Schieberegister
Vor dem Eintritt in die While-Schleife wird schon die erste Zeile ausgelesen und damit das Schieberegister initialisiert. Beim ersten schleifendurchlauf (= Einlesen der 2. Zeile) kommt es sofort zur Fehlermeldung. Die Stringkonvertierung in der Schleife erfolgt aber immer eine Zeile vorher, als alles noch fehlerfrei war (hier bei nur 1 Zeile also mit dem Initialisierungewert). Es wird also insgesamt nur 1 Punkt erzeugt, die Schleife nur einmal ausgeführt, und alles ist in Butter.