Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Jean Gast
|
Verfasst am: 07.11.2004, 19:22 Titel: 2t und 4t lezte Zeile einer Datei auslesen |
|
|
Wie kann ich bei einer Datei die 2t und die 4t lezte Zeile auslesen ?
Vielen Dank |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Jean Gast
|
Verfasst am: 07.11.2004, 19:49 Titel: |
|
|
Nee sorry, die Datei hat viele Zeilen und nicht nur vier. Ist es sonst übrhaupt ned möglich ? |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
Jean Gast
|
Verfasst am: 07.11.2004, 20:07 Titel: |
|
|
Es geht hier um die 2t und 4t lezten[b] Zeilen in einer Datei... |
|
Nach oben |
|
|
dreael Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 2507 Wohnort: Hofen SH (Schweiz)
|
Verfasst am: 07.11.2004, 20:59 Titel: |
|
|
UNIX/Linux-Menschen wie ich denken da sofort an den "tail"-Befehl (Microsoft hat halt so etwas nicht ihrem COMMAND.COM/CMD.EXE spendiert!).
In QB müssen wir ganz einfach die Funktionalität von "tail" nachahmen bzw. selber implementieren. Dies ist übrigens nicht einmal so schwierig, wie nachfolgendes Listing zeigt:
Code: | ' Dieses Programm simuliert ein "tail -n 20 Datei.txt"
CONST nZeilen% = 20
DIM zeiPuf$(0 TO nZeilen% - 1)
n% = 0
' Lesen
OPEN "datei.txt" FOR INPUT AS 1
WHILE NOT EOF(1)
LINE INPUT#1, zeiPuf$(n%)
n% = (n% + 1)MOD nZeilen%
WEND
CLOSE 1
' Ausgeben
FOR i%=0 TO nZeilen% - 1
PRINT zeiPuf$((n% + i%)MOD nZeilen%)
NEXT i% |
@Jean: Für Dein spezielles Problem würde ich unter Linux beispielsweise
Code: | #!/bin/ksh
tail -n 4 datei.txt|awk \
'BEGIN { i=4; } { if(i==4 || i==2) { print $0; } i--; }' |
in ein Shellscript schreiben.
In QB wird dasselbe sogar noch einfacher, weil wir nicht wie eine Pipe zuerst alle 4 Zeilen einem Folgeprozess übergeben müssen, sondern aus diesem Puffer-Array gezielt nur das Gewünschte herauspicken:
Code: | ' viertletzte und zweitletzte Zeile ausgeben"
DIM zeiPuf$(0 TO 3)
n% = 0
' Lesen
OPEN "datei.txt" FOR INPUT AS 1
WHILE NOT EOF(1)
LINE INPUT#1, zeiPuf$(n%)
n% = (n% + 1)MOD 4
WEND
CLOSE 1
letzt4$ = zeiPuf$(n%)
letzt2$ = zeiPuf$((n% + 2)MOD 4) |
_________________ Teste die PC-Sicherheit mit www.sec-check.net |
|
Nach oben |
|
|
Sebastian Administrator
Anmeldungsdatum: 10.09.2004 Beiträge: 5969 Wohnort: Deutschland
|
|
Nach oben |
|
|
|