Mehrere Datensätze in einer Datei???
Übersicht

StargateBetreff: Mehrere Datensätze in einer Datei??? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
wie bekomme ich mehrere Datensätze in eine Datei, die ich später auch wieder getrennt auslesen kann. Ich komm irgendwie nicht dahinter... ![]() ![]() ![]() Suche ja immer nach Beispielen oder erklärungen, aber es gibt nirgends welche???? ![]() Und die Onlinhilfe ist leider nicht sehr hilfreich. ![]() Ich hoffe jemand kann mir helfen. ![]() Gruß Stargate |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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... ![]() Wäre schön wenn jemand da ein Beispiel hätte. Möchte sowas ähnliche wie ein Adressbuch schreiben. ![]() Gruß Stargate |
||
David |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Vielen Dank. ![]() Habs hinbekommen... Gruß Stargate |
||
Stargate |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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!!! ![]() Gruß Stargate |
||
![]() |
Blatolo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lies einfach die gesamte datei aus und schreibe nur das wieder hinein was du noch brauchst. | ||
![]() |
regaa |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
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. ![]() |
||
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group