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:

Sprung ans Ende einer Datei

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



Anmeldungsdatum: 07.07.2020
Beiträge: 85

BeitragVerfasst am: 23.06.2024, 19:17    Titel: Sprung ans Ende einer Datei Antworten mit Zitat

Hallo liebes Forum !

Ich habe ein kurzes Anliegen.

Ist es direkt möglich, den letzten Eintrag aus einer Datei zu bekommen ?

Bsp.

1
2
3
4
5

Direkt die 5 zu bekommen, ohne bis zum Ende auszulesen ?

Gut, man könnte alles mit einem Schlag als String einlesen und geeignet (sofern formatierter Inhalt) am Ende nachlesen..aber gehts auch anders ?

Gruß
_________________
Umfangreichste Angaben zu Primzahl k-Tupel
https://www.pzktupel.de/ktuplets.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Berkeley



Anmeldungsdatum: 13.05.2024
Beiträge: 46

BeitragVerfasst am: 23.06.2024, 21:03    Titel: Antworten mit Zitat

Siehe in der Referenz LOF (=> Ende der Datei) und SEEK. Als Dateimodus musst du allerdings wohl BINARY nehmen.

Außerdem geht es mit GET#, da musst du nur den Index übergeben, ab dem du einlesen willst. Der beginnt mit 1 und letztes Byte ist daher auch gleich der Dateilänge ergo LOF().
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4642
Wohnort: ~/

BeitragVerfasst am: 23.06.2024, 21:37    Titel: Antworten mit Zitat

Sinnvoll umsetzbar natürlich nur, wenn du weißt, wie lang der letzte Eintrag ist. Wenn es sich um die letzte Zeile einer Textdatei mit unbekannten Zeilenlängen handelt, fällt mir als Lösung (außer von vorn alles einzulesen) nur ein, dich von hinten byteweise nach vorn zu tasten und ein Zeilenumbruchzeichen zu suchen. Oder mit größeren Blöcken arbeiten und in den eingelesenen Daten mit INSTRREV dem Zeilenumbruch suchen.
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.


Zuletzt bearbeitet von nemored am 23.06.2024, 21:42, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
pzktupel



Anmeldungsdatum: 07.07.2020
Beiträge: 85

BeitragVerfasst am: 23.06.2024, 21:39    Titel: Antworten mit Zitat

Danke !

Ich habe noch eine effektive Lsg gefunden.

Vorab, alle Einträge als Zeile haben die gleiche Länge X, außer der provozierte kürzere letzte Eintrag mit Länge Y.
Ich checke nun FILELEN(Datei) MOD X = Y

Geht ganz gut...

LG
_________________
Umfangreichste Angaben zu Primzahl k-Tupel
https://www.pzktupel.de/ktuplets.php
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dreael
Administrator


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

BeitragVerfasst am: 24.06.2024, 22:32    Titel: Antworten mit Zitat

Für dieses Problem müsste man direkt den Quellcode vom Linux-Befehl
Code:
tail
studieren, denn tail reagiert bekanntlich auch bei riesigen Logdateien sehr schnell (=muss diese auch nicht erst durchlesen) und die Logdateien müssen überhaupt nicht gleich lange Zeilen besitzen.

Ohne diesen Quellcode zu kennen: Ich würde es hier evtl. damit versuchen, ein Block von einigen KB am Schluss zu lesen (OPEN BINARY und SEEK sind dafür schon einmal die Basis) und dort im RAM nach Zeilenend-Kennzeichen (=CHR$(13)/CHR$(10) bzw. !"\r" und !"\n") suchen, und zwar rücckwärts.
_________________
Teste die PC-Sicherheit mit www.sec-check.net
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 FreeBASIC. 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