Mehrere Datensätze in einer Datei???

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

Stargate

Betreff: Mehrere Datensätze in einer Datei???

BeitragDo, Sep 16, 2004 4:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

wie bekomme ich mehrere Datensätze in eine Datei, die ich später auch wieder getrennt auslesen kann.
Ich komm irgendwie nicht dahinter... Crying or Very sad Crying or Very sad Crying or Very sad
Suche ja immer nach Beispielen oder erklärungen, aber es gibt nirgends welche???? Shocked
Und die Onlinhilfe ist leider nicht sehr hilfreich. Confused

Ich hoffe jemand kann mir helfen. Rolling Eyes

Gruß Stargate
 

David

BeitragDo, Sep 16, 2004 7:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Da du ja genau weist, wieviel Byte ein einzelner Datenstatz belegt, ist das auslesen recht leicht!

Code: [AUSKLAPPEN]

for i = 0 to filesize( datei ) / größe eines datensatzes do
  lese einen datensatz
next


bzw.

Code: [AUSKLAPPEN]

while not eof( datei )
  lese einen datensatz
wend


Besser wäre es aber z.B. die Anzahl der Datensätze als erstes zu speichern, als short Wert z.B.

Code: [AUSKLAPPEN]

anzahl = ReadShort()

for i = 0 to anzahl
  lese einen datensatz
next


Das Schreiben dürfte ja klar sein, wichtig ist natürlich, das du die Datei beim öffnen nich wieder überschreibst!

grüße
http://bl4ckd0g.funpic.de
 

Stargate

BeitragDo, Sep 16, 2004 14:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Erstmal vielen Dank für die Antwort.

Ich bin der spur ja schon auf dem Weg aber klappt irgendwie nicht so ganz.

Code: [AUSKLAPPEN]

.schreibends
stream = WriteFile ("test.sav")
While Not Eof (stream)
i = i + ReadShort (stream)
Wend
WriteShort Stream, i
WriteString Stream, TextFieldText(eingabe1)
WriteString Stream, TextFieldText(eingabe2)
WriteString Stream, TextFieldText(eingabe3)
WriteString Stream, TextFieldText(eingabe4)

CloseFile (stream)
Notify "Alles gespeichert"
Goto anfang

.lesends
stream = ReadFile ("test.sav")
 

i = ReadShort (stream)
augabe2$ = ReadString (stream)
augabe3$ = ReadString (stream)
augabe4$ = ReadString (stream)
augabe5$ = ReadString (stream)

Notify i + ausgabe2$ + ausgabe3$ + ausgabe4$ + ausgabe5$
Notify "Geladen"
CloseFile (stream)
Goto anfang



So da habe ich einmal .schreibends zum datensatz schreiben und einmal .lesends zum lesen!
Wenn ich einen neuen Datensatz schreib überschreibt er den anderen. Und auslesen will er gar nicht. schreibt eine 0 und das wars... Confused

Wäre schön wenn jemand da ein Beispiel hätte. Möchte sowas ähnliche wie ein Adressbuch schreiben. Smile

Gruß Stargate
 

David

BeitragDo, Sep 16, 2004 18:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Grundlegend würd ich da mehr mit Types arbeiten. Dann könntest du die Adressen in einem Array verwalten und vorallem würd ich auf Goto verzichten! Wozu gibts den Funktionen?!?

Dann brauchst du nich vor dem Speichern jedesmal alle bisher gespeicherten Datensätze auszulesen. Um den Dateipointer zu verschieben gibts die Funktion "SeekFile (filehandle, offset)".

Viel Spaß!

grüße
http://bl4ckd0g.funpic.de

4pac

BeitragDo, Sep 16, 2004 23:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst die Datensätze doch auch einfach mit einem Trennzeichen trennen, das Du mit in die Datei schreibst, und nach welchem Du die eingelesene Zeile nachher auch wieder trennst mit Stringbearbeitungsbefehlen.

Grüße,
Thomas
 

David

BeitragFr, Sep 17, 2004 8:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Oder so, dann kann er die Datei aber nicht Binär speichern, sondern im ASCII Format, was natürlich den Nachteil bringt, das nahezu jeder die Daten sehr leicht editieren kann!

grüße
http://bl4ckd0g.funpic.de

dominik

BeitragFr, Sep 17, 2004 16:26
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich machs immer mit nem # am ende/anfang.

Code: [AUSKLAPPEN]

  dateiecd = WriteFile("ecd.dat")
  ;erster teil
  benutzer_text$ = TextFieldText(mail_benutzername_eing)
  anzahl = Len (benutzer_text$)
  For i = 1 To anzahl
    buchstabe$ = Mid(benutzer_text$, i, 1)
    verschl = Asc(buchstabe$)
    WriteLine dateiecd, verschl
  Next
  WriteLine dateiecd, Asc("#")
  ;zweiter teil
  pass_text$ = TextFieldText(mail_pass_eing)
  anzahl = Len (pass_Text$)
  For i = 1 To anzahl
    buchstabe$ = Mid(benutzer_text$, i, 1)
    verschl = Asc(buchstabe$)
    WriteLine dateiecd, verschl
  Next
  WriteLine dateiecd, Asc("#")
  ;dritter teil
  server_text$ = TextFieldText(server_abieter_eing)
  anzahl = Len (server_Text$)
  For i = 1 To anzahl
    buchstabe$ = Mid(server_text$, i, 1)
    verschl = Asc(buchstabe$)
    WriteLine dateiecd, verschl
  Next
  CloseFile dateiecd


und zum auslesen.
Code: [AUSKLAPPEN]

Global benutzer_name$
Global b_passwort$
Global server_name$
If FileType("ecd.dat") = 1 Then
  dateiecd = ReadFile("ecd.dat")
;erster teil.
  Repeat
    buchstabe_verschl = ReadLine(dateiecd)
    buchstabe$ = Chr(buchstabe_verschl)
    benutzer_name$ = benutzer_name$ + buchstabe$
  Until buchstabe$ = "#"
  anzahl = Len(benutzer_name$)
  benutzer_name$ = Left(benutzer_name$, anzahl - 1)
;zweiter teil
  Repeat
    buchstabe_verschl = ReadLine(dateiecd)
    buchstabe$ = Chr(buchstabe_verschl)
    b_passwort$ = b_passwort$ + buchstabe$
  Until buchstabe$ = "#"
  anzahl = Len(b_passwort$)
  b_passwort$ = Left(b_passwort$, anzahl - 1)
;dritter teil
  Repeat
    buchstabe_verschl = ReadLine(dateiecd)
    server$ = Chr(buchstabe_verschl)
    server_name$ = server_name$ + server$
  Until Eof(dateiecd)
  CloseFile dateiecd
EndIf


is jetzt natürlich auch noch in ascii verschlüsselt.
BB+ 1.41|Sempron 2.8|geforce fx5200|1GB DDR|XP home SP2 / prof.
 

Stargate

BeitragSa, Sep 18, 2004 17:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank. Very Happy

Habs hinbekommen...

Gruß Stargate
 

Stargate

BeitragMo, Sep 20, 2004 22:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Da plagt sich bei mir doch wieder ein Problem!!!

Wie kann ich eigentlich einen Datensatz zwischen 2 anderen wieder löschen?
Einen Befehl scheint es nicht zu geben, hab da zwar die möglichkeit den Datensatz mit Nullen zu überschreiben. Aber es ist ziemlich doof wenn die Daten-Datei zu groß wird!!! Wink

Gruß Stargate

Blatolo

BeitragDi, Sep 21, 2004 6:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Lies einfach die gesamte datei aus und schreibe nur das wieder hinein was du noch brauchst.

regaa

BeitragDi, Sep 21, 2004 7:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Oder setz den Zeiger auf die Stelle ab der ein paar Stellen gelöscht werden sollen, kopier alle Zeichen bis zum ende der Datei, ersetze dann diesen String, durch den mit den schon gelöschten Stellen, und schreib ihn wieder an die Stelle hin wie s.o. .
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net
 

Stargate

BeitragDi, Sep 21, 2004 14:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich stelle meine Frage mal anders: Ich suche einen Befehl womit ich Zeilen oder Zeichen in einer Daten-Datei löschen kann?


Zitat:
regaa Verfasst am: Di Sep 21, 2004 5:52 am Titel:

--------------------------------------------------------------------------------

Oder setz den Zeiger auf die Stelle ab der ein paar Stellen gelöscht werden sollen, kopier alle Zeichen bis zum ende der Datei, ersetze dann diesen String, durch den mit den schon gelöschten Stellen, und schreib ihn wieder an die Stelle hin wie s.o. .


Gelöschte Stellen??? ??? Irgendwie verstehe ich nur Bahnhof!

Gruß Stargate
 

David

BeitragDi, Sep 21, 2004 14:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Diesen Befehl gibt es nicht...
Du kannst die Bytes, wie bereits erwähnt, mit '\0' Bytes überschreiben, dann bläht sich deine Datei aber unnötigerweise auf.

Die bleibt nichts anderes übrig das den Datensatz manuell "auszuschneiden".

grüße
http://bl4ckd0g.funpic.de

regaa

BeitragDi, Sep 21, 2004 20:45
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo, naja, also so wie David, arrrr mir hat das Wort zurechtschneiden gefehlt. Ich weiss das ich es zu kompliziert erklärt hab, ein Grund warum ich selten auf Posts antworte. Confused
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group