Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Die 2,4,6,8 und 10 lezte Zeile einer Datei auslesen

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Jean



Anmeldungsdatum: 26.12.2004
Beiträge: 15
Wohnort: Schweiz

BeitragVerfasst am: 26.12.2004, 11:22    Titel: Die 2,4,6,8 und 10 lezte Zeile einer Datei auslesen Antworten mit Zitat

Hallo

Ich weiss das ich schon mal was ähnliches gefragt habe, aber dort konnte mir niemand eine funktionierende Antwort geben.
Also mein Problem ist das ich die 2,4,6,8 und 10 lezte Zeile einer Datei auslesen sollte.
Könnte mir jemand mit ein paar Zeilen Code aushelfen ? zwinkern

1000 Dank Jean grinsen grinsen grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 26.12.2004, 11:28    Titel: Antworten mit Zitat

Siehe hier.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jean



Anmeldungsdatum: 26.12.2004
Beiträge: 15
Wohnort: Schweiz

BeitragVerfasst am: 26.12.2004, 11:32    Titel: Hmm... Antworten mit Zitat

Sorry, aber die Antworten aus dem Beitrag gehen alle nicht.
Es wird nichts aus der Datei gelesen und die Vars bleiben leer. traurig traurig grinsen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.12.2004, 14:43    Titel: Neuer Versuch Antworten mit Zitat

Hallo.

Und ein neuer Anlauf...

Code:
DIM Gesamtzeilen AS INTEGER
DIM Datei AS STRING
DIM ZEILEN(1 TO 5) AS STRING
DIM ZEILENNR(1 TO 5) AS INTEGER

Datei = "TEST.TXT"

OPEN Datei FOR INPUT AS #1 
DO
 LINE INPUT #1, TEMP$
 GesamtZeilen=GesamtZeilen+1
LOOP UNTIL EOF(1)
CLOSE #1

PRINT "Die Datei hat insgesamt "; LTRIM$(STR$(GesamtZeilen)); " Zeilen."

j%=10
FOR i%=1 TO 5
 ZEILENNR(i%) = GesamtZeilen-j%
 PRINT "Die "; LTRIM$(STR$(j%)); ". letzte Zeile ist Zeilennummer "; LTRIM$(STR$(ZEILENNR(i%))); "."
 j%=j%-2
NEXT i%

zaehler%=0
OPEN DATEI FOR INPUT AS #1
DO
 zaehler%=zaehler%+1
 LINE INPUT #1, TEMP$
 FOR i%= 1 TO 5
  IF zaehler%=ZEILENNR(i%) THEN ZEILEN(i%) = TEMP$
 NEXT i%
LOOP UNTIL EOF(1)
CLOSE #1

PRINT:PRINT
COLOR 14: PRINT "Und nun das Ergebnis:":PRINT:COLOR 7
FOR i% = 1 TO 5
 PRINT ZEILEN(i%)
NEXT i%

SLEEP:END


Im Array ZEILEN() befinden sich dann die 5 verlangten Zeilen als Strings.

Der Code funktioniert und ist getestet. happy

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
dreael
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 2529
Wohnort: Hofen SH (Schweiz)

BeitragVerfasst am: 26.12.2004, 16:00    Titel: Antworten mit Zitat

Für kleine Dateien ist dies i.O.. Bei grossen Dateien dagegen kann es entsprechend lange dauern (performancemässig nicht ganz optimal), weil man die Zeilen zwei Mal einliest. Unter Linux ist sonst "tail" noch recht effizient implementiert, d.h. selbst auf einem 486er-Server läuft ein "tail -n 20" recht schnell auf eine z.B. 100 MB grosse Logdatei angewendet, d.h. muss dort nicht einmal alles einlesen, sondern macht dort vermutlich gleich ein SEEK an den Schluss, liest eine Handvoll ein und zählt die Zeilenenden nach.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.12.2004, 16:29    Titel: Ja. Antworten mit Zitat

Hallo.

Ja, das stimmt. Aber bei aktuelleren PCs sollten selbst Dateien mit 10000 Zeilen noch nicht allzulange dauern. (=> Wenige Sekunden)
Zu beachten ist bei Dateien mit mehr als 32767 Zeilen, dass man einen Long Integer (LONG) als Datentyp für GesamtZeilen benutzen muss!

Effizienter wäre es vielleicht auch mit GET nach Zeilenumbrüchen zu suchen.
Wenn man bei so einer Methode bleiben möchte, kann man diese ja auch noch mit Assembler optimieren.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Jean



Anmeldungsdatum: 26.12.2004
Beiträge: 15
Wohnort: Schweiz

BeitragVerfasst am: 26.12.2004, 17:27    Titel: THX Antworten mit Zitat

Juhuu.. vielen Dank an alle happy happy

Also jezt hab ich nur noch ein Problem: Wie kann ich nun machen das ich am Schluss 5 Vars habe ?

Vielen Dank nochmals ... Jean
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 26.12.2004, 18:20    Titel: Na die hast du doch! Antworten mit Zitat

Hallo.

Die hast du doch!

10. letzte Zeile: PRINT ZEILEN(1)
8. letzte Zeile: PRINT ZEILEN(2)
6. letzte Zeile: PRINT ZEILEN(3)
4. letzte Zeile: PRINT ZEILEN(4)
2. letzte Zeile: PRINT ZEILEN(5)

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz