Schrift
[thread]12536[/thread]

Zeilenanzahl einer Textdatei ermitteln

Leser: 2


<< >> 8 Einträge, 1 Seite
Gast Gast
 2008-09-23 17:54
#114875 #114875
Servus,

wie kann ich die Anzahl der Zeilen einer Datei ermitteln, ohne mittels system auch "wc -l" zurückzugreifen? Ich möchte die Datei auch nicht öffnen, um in einer Schleife pro Zeile eine Variable incrementieren, ...
moritz
 2008-09-23 18:12
#114876 #114876
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Schau mal in perlfaq5, da wird genau diese Frage beantwortet.
Gast Gast
 2008-09-23 18:29
#114877 #114877
Hi Moritz,

danke, aber ich suche ja gerade eine Lösung ohne increment in der Schleife.

Hintergrund: ich möchte Dateien einlesen, die 1-n Zeilen einhalten können. Ab einer noch nicht genau definierten Grenze möchte ich eine Rückfrage einbauen, ob das wirklich gewollt ist. Wenn ich die Datei daher vorheri einmal komplett einlese, um anschließend zu fragen "Bist du sicher", halte ich das für eine nicht wirklich gelungene Lösung.
#Kein Kommentar
 2008-09-23 18:42
#114878 #114878
User since
2007-06-09
575 Artikel
HausmeisterIn
[default_avatar]
du könntest mit -s die dateigröße in bytes abfragen, wenn die anzahl von bytes zu groß ist, könntest du die frage an den benutzer stellen.

oder brauchst du unbedingt die zeilennummern?
Gerade weil wir alle in einem Boot sitzen, sollten wir froh sein, dass nicht alle auf unserer Seite sind
Gast Gast
 2008-09-23 18:49
#114879 #114879
Hi,

es sollte auch mit der Dateigröße funktionieren, aber interessieren würde es mich halt doch ob es da nicht noch was gibt. Das ich auf Unix/Linux "wc -l" nutzen kann, ist mir ja auch klar, aber gibt's denn keinen reinen Perl Weg?
Struppi
 2008-09-23 18:51
#114880 #114880
User since
2006-02-17
628 Artikel
BenutzerIn
[Homepage]
user image
Ohne die Datei zu öffnen wird's schwierig, aber einlesen musst du sie nicht:
Code (perl): (dl )
1
2
3
open F, $0;
while(<F>){;}
print $.;


[EDIT]Vergiss den Vorschlag schnell wieder! Er ist 500 mal langsamer als die Version mit dem sysread.
Gast Gast
 2008-09-23 19:38
#114886 #114886
oder so ;-P
Code (perl): (dl )
1
2
3
my $lc;
for(open(F, $0); !eof(F) || !($lc=$.) || !close(F) ; <F> ){}
print "$lc\n";
moritz
 2008-09-24 00:47
#114893 #114893
User since
2007-05-11
923 Artikel
HausmeisterIn
[Homepage]
user image
Naja, newlines zählen kann man nur mit Lesen der Datei. Das ist keine Meta-Information, die irgendwo im Dateisystem gespeichert wird. Auch "wc -l" leist die Datei und zählt Leerzeichen.

Hast du die Version mit sysread mal ausprobiert? Ist dich wirklich deutlich langsamer als wc -l?
<< >> 8 Einträge, 1 Seite



View all threads created 2008-09-23 17:54.