Wie kann ich eine Datei einlesen und Werte ausgeben

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Schoppy

Betreff: Wie kann ich eine Datei einlesen und Werte ausgeben

BeitragMo, Aug 16, 2004 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo, habe erst vor kurzer zeit angefangen zu programieren.Habe folgendes Problem:
Ich schreibe in eine Datei mit Write Line einige werte.Dieser Datei füge ich ständig weitere Werte hinzu,jeweils in der nächsten zeile.Das ganze sieht so aus:

Function action()

fs = FileSize("datenbank.txt") ; Dateigröße feststellen
Datei$= OpenFile("datenbank.txt") ;Datei öffnen
SeekFile(Datei$,fs) ; an das Ende der Datei "springen"
Text1$=TextFieldText$ (field1) ;Text aus textfield speichern
Text2$=TextFieldText$ (field2) ;Text aus einem zweiten textfield speichern

WriteLine (Datei$,Chr(13)+Text1$+Text2$) ;texte aus beiden textfields in datei schreiben
CloseFile Datei$

End Function
;bis hier hin funktioniert es
;_-----------------------------------------------Laden----------------------------
Function laden()

daten=ReadFile("datenbank.txt")
Repeat
Wert1$=ReadLine$(daten)
Wert2$=ReadLine$(daten)

AddGadgetItem infolistbox, Wert1$ ;hier soll der wert1 in einer Listbox ausgegeben werden
CloseFile daten

Forever
CloseFile daten

End Function

mit welchen Befehl kann ich die gesamte datei einlesen und jeweils den ersten Wert in der Listbox ausgeben, desweiteren den jeweils zugehörigen wert2 durch anklicken in der listbox des ersten wertes
in einer weiteren listbox ausgeben ?

Danke schon mal im voraus

Code: [AUSKLAPPEN]

Vertex

BeitragMo, Aug 16, 2004 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Eof ist die Lösung. Und warum eigentlich CloseFile in die Schleife?
vertex.dreamfall.at | GitHub
 

Schoppy

BeitragMo, Aug 16, 2004 18:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke erstmal, Eof ist nicht schlecht, aber jetzt gibt er mir in der listbox nur ein kästchen aus und mit die Online Hilfe bringt mich auch irgendwie nicht weiter. hast du vielleicht einen Code ?Es sieht jetzt folgendermassen aus:
;_-----------------------------------------------Laden----------------------------
Function laden()

Datei$="datenbank.txt"
daten=ReadFile(Datei$)
While Not Eof(daten)
Wert1$=ReadLine$(daten)
Wert2$=ReadLine$(daten)
Wend

AddGadgetItem infolistbox, Wert1$ ;hier soll der wert1 in einer Listbox ausgegeben werden


Forever
CloseFile daten

End Function
;-----------------------------------------------------------------
die Datei Datenbank.txt sieht so aus: Sie enthällt 3 Einträge

xyzAction
abcAdventure
iuzEgo
;--------------------

simi

BeitragMo, Aug 16, 2004 19:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

also du shreibst zuerst eine Zeile, und liest dann zwei Zeilen aus.
Das kann ja nicht gehen. Ich würds so machen (Nicht getestet!!!):
Code: [AUSKLAPPEN]

dim eintrage$(100)

Function action()
  fs = FileSize("datenbank.txt") ; Dateigröße feststellen
  Datei$= OpenFile("datenbank.txt") ;Datei öffnen
  SeekFile(Datei$,fs) ; an das Ende der Datei "springen"
  Text1$=TextFieldText$ (field1) ;Text aus textfield speichern
  Text2$=TextFieldText$ (field2) ;Text aus einem zweiten textfield speichern

  WriteLine (Datei$,Text1$+"#"Text2$) ;texte aus beiden textfields in datei schreiben
  CloseFile Datei$

End Function



Function laden()

  daten=ReadFile("datenbank.txt")
  while not(eof(daten))
    Wert$=ReadLine$(daten)
  ; Schaut wo das #-Zeichen ist mit instr und liest dann die beiden werte aus
    wert1$ = left(wert,instr(wert,"#"))
    wert2$ = Right(wert,Len(wert)-,instr(wert,"#"))
   
    Eintrage(x) = wert2$
    x = x + 1

    AddGadgetItem infolistbox, Wert1$ ;hier soll der wert1 in einer Listbox ausgegeben werden
  wend
  CloseFile daten
End Function



Zitat:

mit welchen Befehl kann ich die gesamte datei einlesen und jeweils den ersten Wert in der Listbox ausgeben, desweiteren den jeweils zugehörigen wert2 durch anklicken in der listbox des ersten wertes
in einer weiteren listbox ausgeben ?


Also, wenn ich das richtig verstanden habe, soll in der LB1 alle ersten Einträge angezeigt werden.
Wenn ich jetzt einen in der LB1 auswähle, denn soll eine 2. LB (LB2) angezeigt werden, die dann den 2. Wert enthählt.
Also, du musst prüfen ob ein eintrag ausgewählt wird (mit event). dann schaust du welcher, und zeigst dann in der LB2 diesen an. Natürlich musst du die 2. Werte abgespeichert haben (sie Beispiel oben).

Hier mein Vorschlag(nicht getestet):

Code: [AUSKLAPPEN]

if WaitEvent() = $401 and Eventsource() = LB1 then
  ClearGadgetItems LB2
  AddGadgetItem LB2,Eintrage(SelectedGadgetItem(LB1))
end if


Ich hoffe ich konnte dier helfen


cu simi
 

Schoppy

BeitragDi, Aug 17, 2004 0:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Very Happy Super Es funktioniert. Vielen Dank für deine schnelle Hilfe !!! Eine Frage noch: Und zwar gibt er jetzt in LB1 den ersten Wert+# aus, kann ich # verstecken ???
 

dubitat

BeitragDi, Aug 17, 2004 13:36
Antworten mit Zitat
Benutzer-Profile anzeigen
gibt da einen befehl in der onlinehilfe unter string, wo drinsteht, wie man einen string nach einem zeichen/zeichenfolge durchsuchen kann!
Erare humanum est - Irren ist Menschlich

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group