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:

Anzahl der Zeilen und bestimmte Zeile aus 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
DB1BMN



Anmeldungsdatum: 17.12.2005
Beiträge: 24
Wohnort: Delmenhorst

BeitragVerfasst am: 21.07.2006, 17:10    Titel: Anzahl der Zeilen und bestimmte Zeile aus Datei auslesen? Antworten mit Zitat

Hallo,

ich habe eine Textdatei mit einigen tausend Zeilen (Gefahrgutdatenbank).
Wie kann ich mit QB rausfinden wie viele Zeilen die Datei genau hat und wie kann ich eine bestimmte Zeile auslesen, ohne jedesmal durch die ganze Datei durchlaufen zu müssen?

Hintergrund: Die Datei enthält eine Gefahrstoffdatenbank, bei der jede Zeile mit einer eindeutigen Gefahrstoffnummer beginnt und weitere Infos zum betreffenden Stoff enthält. Die Nummern sind nach Größe sortiert, jedoch nicht fortlaufend. Wüsste ich die absolute Anzahl der Zeilen und könnte eine Zeile gezielt auslesen, käme ich mit maximal Log_2(zeilen) Iterationsschritten zu meinen gesuchten Datensatz.
Vielleicht kann mir jemand helfen?

Beste Grüße, Marek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
raph ael



Anmeldungsdatum: 12.04.2006
Beiträge: 472

BeitragVerfasst am: 21.07.2006, 17:15    Titel: Antworten mit Zitat

Code:

open "datenb.ank" for input as #1
while not eof(1)
   input #1,$temp
   datensaetze%=datensaetze%+1
wend
print "Datensätze:"+datensaetze%

Das wäre der 1. Teil. Damit könntest du herausfinden, wieviele Datensätze die Datenbank hat.

MfG Raphael

edit:
Du könntest auch herausfinden, wieoft der ASCII- Code 13 (CR) in der Datei vorhanden ist.
13 ist der ASCII- Code für den Zeilenumbruch.
Wenn wenn der letzte Datensatz nicht mit einem Zeilenumbruch endet, musst du noch 1 dazuaddieren
_________________
Zitat:
1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Elvis



Anmeldungsdatum: 01.06.2006
Beiträge: 818
Wohnort: Deutschland, BW

BeitragVerfasst am: 21.07.2006, 17:49    Titel: Antworten mit Zitat

Bestimmte Zeilen kannste glaube ich nur Binär auslesen, also:
Code:

OPEN "Datei.dat" FOR BINARY AS #1
...


In diesem Modus kannst du dann auf jedes einzelne Byte zugreifen. Dafür müsste aber jede Zeile in der Datei gleichlang sein, damit du überhaupt weißt welche Bytes in welcher Zeile stehen...
---------------------------------------------------------------------------------------
Aber wenn du mit Arrays arbeitest ist es ja nicht sonderlich schwer, jede Zeile einzulesen.

Code:

DIM Zeile(MehrereTausend)
OPEN "Datei.dat" FOR INPUT AS #1
FOR Wdh% = 0 TO MehrereTausend
INPUT #1, Zeile(Wdh%)
NEXT Wdh%
CLOSE #1
INPUT "Welche Zeile soll angezeigt werden? ", WelcheZeile
CLS

PRINT WelcheZeile ; ":" ; Zeile(WelcheZeile)



Grüße, Elvis
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
raph ael



Anmeldungsdatum: 12.04.2006
Beiträge: 472

BeitragVerfasst am: 21.07.2006, 18:04    Titel: Antworten mit Zitat

Das Zeilenende besteht aus den Zeichen CR und LF.
CR hat den ASCII- Coder 13 und LF den ASCII- Code 10.
Man(n) kann es also sehrwohl überprüfen, oder sonst festlegen, dass eine Zeile 100 Zeichen (oder mehr) lang ist, und das was fehlt mit Leerzeichen füllen.
Diese kann man mit RTRIM$ wieder wegbeamen (Ziel: Nirgendwo durchgeknallt ).
_________________
Zitat:
1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DB1BMN



Anmeldungsdatum: 17.12.2005
Beiträge: 24
Wohnort: Delmenhorst

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

Moin,

ok ich denke ich werde es denn wohl mit Datenfeldern machen, also einmal die komplette Datei ins Datenfeld kopiere und dann die Elemente adressieren.
Weiß jemand ob ich das Datenfeld vorher schon initialisieren muss oder kann ich einfach während der Laufzeit immer ein Element dranhängen?

Beste Grüße, Marek
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Michael Frey



Anmeldungsdatum: 18.12.2004
Beiträge: 2577
Wohnort: Schweiz

BeitragVerfasst am: 22.07.2006, 09:20    Titel: Antworten mit Zitat

Wenn du das Datenfeld dynamisch Initalisierst, kannst du es später ändern.
Code:
REDIM a$(5)
FOR i = 0 TO 5
        a$ = STR$(i ^ 2)
NEXT i

q = 20
REDIM a$(q)
FOR i = 0 TO 20
        a$ = STR$(i ^ 2)
NEXT i

Online Hilfe von QBasic 1.1 hat Folgendes geschrieben:
REDIM deklariert ein dynamisches Datenfeld oder ändert die Größe eines
dynamischen Datenfelds, wobei alle vorherigen Werte gelöscht werden.

Das scheint zu passen.
_________________
http://de.wikibooks.org/wiki/FreeBasic Jede Hilfe für dieses Buch ist Willkommen!
http://de.wikibooks.org/wiki/FreeBasic:_FAQ FAQ zu Freebasic (im Aufbau, hilfe Willkommen)
Neu mit Syntax Highlight
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DB1BMN



Anmeldungsdatum: 17.12.2005
Beiträge: 24
Wohnort: Delmenhorst

BeitragVerfasst am: 22.07.2006, 10:26    Titel: Antworten mit Zitat

Au weia, ich hab gestern Nacht gemerkt, dass ich ganz andere Probleme bekomme. In QB hat man ja nur die magische 64 k-Grenze und meine Datei ist ca. 130 k groß. Na ja dann muss ich dass halt doch in FB weiter muddeln. Aber trotzdem Danke erst mal allen für die Hilfe.

Beste Grüße, Marek
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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