Aktuelle Dateizeilennummer mit $. Variable

8

Ich verstehe, dass ich die aktuelle Zeilennummer einer Datei, die ich durchlaufe, mit der eingebauten Variable $. bekommen kann. Als ein Experiment habe ich das verwendet, um jeder Zeile in einer Datei den Wert von $. (die aktuelle Zeilennummer) voran zu stellen. Dies hat jedoch nicht wie erwartet funktioniert. I.e. gegeben den folgenden Dateiinhalt

%Vor%

Dann würde ich erwarten, dass der folgende Code jeder Zeile ihre Zeilennummer voranstellt

%Vor%

, aber stattdessen gibt es die folgende Ausgabe

%Vor%

Voranstellen jeder Zeile mit der Anzahl der Zeilen in der Datei. Anstelle der aktuellen Zeile.

    
Fred Clausen 16.11.2013, 16:03
quelle

1 Antwort

14

Das liegt daran, dass die Art, wie Sie die Schleife geschrieben haben, die gesamte Datei liest, bevor Sie die Zeilen durchlaufen. Wenn Sie keinen besonderen Grund haben, etwas Besseres als einfachen sequenziellen Zugriff auf die Datei zu benötigen, sollten Sie while anstelle von for verwenden, wie folgt:

%Vor%

Wenn < Dateihandle > im Listenkontext aufgerufen wird (wie in Ihrer for -Schleife), gibt es den gesamten Inhalt der Datei als Liste von Zeilen zurück. Daher verhält sich Ihr Code ähnlich wie wenn Sie dies stattdessen geschrieben hätten:

%Vor%

Um Ihr gewünschtes Ergebnis zu erreichen, sollten Sie <> wiederholt im skalaren Kontext aufrufen (was die Zuweisung in der while Bedingung tut), um jeweils eine Zeile aus der Datei zu holen und den Körper der Schleife mit auszuführen $. auf die richtige Anzahl gesetzt.

Globale Dateihandles gelten auch als schlechte Methode. Aus mehreren Gründen ist es besser, stattdessen ein Dateihandle zu verwenden, auf das eine lexikalische Variable verweist:

%Vor%     
Mark Reed 16.11.2013, 16:04
quelle

Tags und Links