Variable (Structure) abspeichern / auslesen
-
- Beiträge: 74
- Registriert: 29.03.2008 15:22
Variable (Structure) abspeichern / auslesen
Hallo Leute,
ich suche eine Möglichkeit eine strukturierte Variable in einer Datei abzuspeichern und später auszulesen.
Vielen Dank für Eure Hilfe.
BSP:
CreateFile(0, "PersDaten.dat")
Structure Person
Name.s
Vorname.s
Strasse.s
PLZ.s
Ort.s
EndStructure
User.Person
User\Name = "Mustermann"
User\Vorname = "Max"
User\Strasse = "..."
User\PLZ = "12345"
User\Ort = "Bremen"
Jetzt möchte ich die Variable "User" in der Datei "PersDaten.dat" speichern und mit einem anderen Programm auslesen.
ich suche eine Möglichkeit eine strukturierte Variable in einer Datei abzuspeichern und später auszulesen.
Vielen Dank für Eure Hilfe.
BSP:
CreateFile(0, "PersDaten.dat")
Structure Person
Name.s
Vorname.s
Strasse.s
PLZ.s
Ort.s
EndStructure
User.Person
User\Name = "Mustermann"
User\Vorname = "Max"
User\Strasse = "..."
User\PLZ = "12345"
User\Ort = "Bremen"
Jetzt möchte ich die Variable "User" in der Datei "PersDaten.dat" speichern und mit einem anderen Programm auslesen.
- Josef Sniatecki
- Beiträge: 657
- Registriert: 02.06.2008 21:29
- Kontaktdaten:
Das ganze kannst du mit WriteData machen. Jedoch ist das auslesen der
Daten in eine Struktur wieder schreibarbeit. Außerdem musst du eine
extraschleife für das auslesen von Strings machen, da ReadString() bis
EOF und nicht NULL ließt.
EDIT: Mit Strings in Strukturen kann das problematisch werden.
Verwende einfach die Methode von ts-soft.
Daten in eine Struktur wieder schreibarbeit. Außerdem musst du eine
extraschleife für das auslesen von Strings machen, da ReadString() bis
EOF und nicht NULL ließt.
EDIT: Mit Strings in Strukturen kann das problematisch werden.
Verwende einfach die Methode von ts-soft.
Zuletzt geändert von Josef Sniatecki am 01.11.2008 23:11, insgesamt 1-mal geändert.
PB 4.61 | Windows Vista - 32Bit
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
- ts-soft
- Beiträge: 22292
- Registriert: 08.09.2004 00:57
- Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel - Wohnort: Berlin
Code: Alles auswählen
Structure Person
Name.s
Vorname.s
Strasse.s
PLZ.s
Ort.s
EndStructure
User.Person
User\Name = "Mustermann"
User\Vorname = "Max"
User\Strasse = "..."
User\PLZ = "12345"
User\Ort = "Bremen"
If CreateFile(0, "PersDaten.dat")
WriteStringN(0, User\Name)
WriteStringN(0, User\Vorname)
...
CloseFile(0)
EndIf
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

- hjbremer
- Beiträge: 822
- Registriert: 27.02.2006 22:30
- Computerausstattung: von gestern
- Wohnort: Neumünster
Da du soetwas ähnliches wie eine Datenbank machen willst kannst du auch mit FixStrings arbeiten. Speicherplatz ist ja heutzutage kein Problem mehr.
Hier das Prinzip für Schreiben und lesen
Hier das Prinzip für Schreiben und lesen
Code: Alles auswählen
Structure Person
Name.s {30}
Vorname.s{30}
Strasse.s{30}
PLZ.s {5}
Ort.s {30}
EndStructure
Procedure SatzLesen(*Daten.Person, nr)
mem = *Daten
memlg = SizeOf(Person)
dnr = OpenFile(#PB_Any,"test.bin")
If dnr
FileSeek(dnr, nr * memlg)
ReadData(dnr, mem,memlg)
CloseFile(dnr)
EndIf
EndProcedure
Procedure SatzSchreiben(*Daten.Person)
mem = *Daten
memlg = SizeOf(Person)
;Char 0 gegen Leerzeichen austauschen
;sonst können eventuell andere Programme die Daten nicht lesen
For j = mem To mem + memlg
a = PeekB(j)
If a = 0
PokeB(j,32)
EndIf
Next
dnr = OpenFile(#PB_Any,"test.bin")
FileSeek(dnr, Lof(dnr))
WriteData(dnr, mem, memlg)
CloseFile(dnr)
EndProcedure
User.Person
User\Name = "Gustermann"
User\Vorname = "Gax"
User\Strasse = "Gusterstrasse 25"
User\PLZ = "23456"
User\Ort = "Gremen"
SatzSchreiben(User.Person)
User\Name = "Mustermann"
User\Vorname = "Max"
User\Strasse = "Musterstrasse 25"
User\PLZ = "12345"
User\Ort = "Bremen"
SatzSchreiben(User.Person)
User\Name = "Bustermann"
User\Vorname = "Bax"
User\Strasse = "Busterstrasse 25"
User\PLZ = "12345"
User\Ort = "HBremen"
SatzSchreiben(User.Person)
Load.Person
For j = 0 To 2
SatzLesen(Load.Person, j)
Debug Load\Name
Debug Load\VorName
Debug Load\Strasse
Debug Load\Plz
Debug Load\Ort
Debug ""
Next
Purebasic 5.70 x86 5.72 X 64 - Windows 10
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
-
- Beiträge: 17
- Registriert: 01.11.2008 12:48
- Wohnort: Österreich
Hi, ich verwende recht zufrieden die Methode, die TS-Soft beschrieben hat, jedoch schreibe ich die einzelnen Angeben (Name, Vorname, Strasse, etc.) in einen String mit einem Platzhalter getrennt (z.B. ";") bevor ich sie mit WriteStringN() speichere. Auslesen funktioniert dann mit Readstring() und Stringfield(). So ist die Datei etwas kompakter und ich habe immer alle Angaben in einer Zeile (finde ich persönlich übersichtlicher).
Lg
Lg
System: Win XP, SP3, PB 4.31, Pentium D 3 GHz 1 GB RAM
- Josef Sniatecki
- Beiträge: 657
- Registriert: 02.06.2008 21:29
- Kontaktdaten:
Ups hab mich verschrieben ich meine eol ( end of line).Little John hat geschrieben:Das stimmt nicht. ReadString() liest bis zum Ende einer Zeile (wobei es (mindestens) CR, LF und CRLF als Zeilenumbruch interpretiert) oder bis zu einem Chr(0), je nachdem was es zuerst findet.Josef Sniatecki hat geschrieben:da ReadString() bis EOF und nicht NULL ließt
Gruß, Little John
Gibt es eigentlich "eol"? Kenne nur "endl".
PB 4.61 | Windows Vista - 32Bit
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß
Homepage
"Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das Besitzen sondern das Erwerben, nicht das Dasein, sondern das Hinkommen, was den grössten Genuss gewährt." - Carl Friedrich Gauß