Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
DB1BMN
Anmeldungsdatum: 17.12.2005 Beiträge: 24 Wohnort: Delmenhorst
|
Verfasst am: 21.07.2006, 17:10 Titel: Anzahl der Zeilen und bestimmte Zeile aus Datei auslesen? |
|
|
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 |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 21.07.2006, 17:15 Titel: |
|
|
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 |
|
 |
Elvis

Anmeldungsdatum: 01.06.2006 Beiträge: 818 Wohnort: Deutschland, BW
|
Verfasst am: 21.07.2006, 17:49 Titel: |
|
|
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 |
|
 |
raph ael
Anmeldungsdatum: 12.04.2006 Beiträge: 472
|
Verfasst am: 21.07.2006, 18:04 Titel: |
|
|
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 ). _________________
Zitat: | 1000 Yottabytes sind absurd. 640 Yottabytes sollten genug für jeden sein. |
|
|
Nach oben |
|
 |
DB1BMN
Anmeldungsdatum: 17.12.2005 Beiträge: 24 Wohnort: Delmenhorst
|
Verfasst am: 21.07.2006, 22:32 Titel: |
|
|
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 |
|
 |
Michael Frey

Anmeldungsdatum: 18.12.2004 Beiträge: 2577 Wohnort: Schweiz
|
Verfasst am: 22.07.2006, 09:20 Titel: |
|
|
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 |
|
 |
DB1BMN
Anmeldungsdatum: 17.12.2005 Beiträge: 24 Wohnort: Delmenhorst
|
Verfasst am: 22.07.2006, 10:26 Titel: |
|
|
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 |
|
 |
|