![]() |
Unterschiedliche Daten speichern u. auslesen
Moin,
erstmal sorry für den komischen Titel, ich steh nur heute etwas auf dem Schlauch. Also los: Ich habe 2 Listboxen und 2 Editfelder, in denen sich jeweils nur Text befindet. Jetzt möchte ich diese Daten irgendwo abspeichern und dann später wieder laden können. Beim Laden möchte ich dann das jeder Datensatz wieder da ist wo er eigentlich hingehört (z.B. in das zugehörige Editfeld). Jetzt stellt sich mir bloß die Frage, wie ich sowas realisieren könnte. Auf Datenbanken wollte ich eigentlich generell verzichten. Hat jemand ne gute Idee ? Vielen Dank schonmal, |
Re: Unterschiedliche Daten speichern u. auslesen
wieviele datensätze sind es denn?
|
Re: Unterschiedliche Daten speichern u. auslesen
Zitat:
|
Re: Unterschiedliche Daten speichern u. auslesen
hi,
die listboxen kannst du mit listbox1.items.savetofile(datei) abspeichern und mit listbox1.items.loadfromfile(datei) wieder laden. für die edits: das würde ich mit einer ini-datei machen. wenn du nicht weisst wie das geht, such mal in diesem forum nach "ini", ich bin mir sicher, du findest mehr als genug. gruss urbanbruhin |
Re: Unterschiedliche Daten speichern u. auslesen
Zitat:
Ich möchte ja die Daten beider Listboxen und den Edits in einer einzigen Datei haben. ;) |
Re: Unterschiedliche Daten speichern u. auslesen
Dann machst du das so:
Du speicherst immer die Position in der Datei und die Länge am anfang. also für 2 Strings so:
Code:
Quasi ein Inhaltsverzeichnis :)
16 23 39 2 <Erster Strig; Pos: 16; Läge: 23><zeiter String; Anfang: 39; Länge: 2>
Das ganze lässt sich relativ einfach mit streams realisieren ;) |
Re: Unterschiedliche Daten speichern u. auslesen
Delphi-Quellcode:
So könnte ich mir das nur vorstellen (Leider habe ich keine Ahnung von Streams :oops: ).
Listbox1 <'Gabi Mauserich' Pos: 1>
Listbox1 <'Olli Bierhoff' Pos: 2> ListBox2 <'Peter Knoblauch' Pos: 1> Edit1 <'Das ist aber komisch...'> Ok, doch nehmen wir an meine ListBox1 hat 8 Items, dann gehe ich die alle mit ner for-Schleife durch und speichere die.
Delphi-Quellcode:
So hab ich mir das vorgestellt. Bloß weiß ich nicht wie ich das Speichern soll. Und irgendwie haut das mit der for-Schleife auch net hin, dass Maximum wird immer überschritten.
procedure TForm1.Button1Click(Sender: TObject);
var i : integer; begin for i := 1 to ListBox1.Items.Count do // Speichern ?? end; :wall: Ich krieg heut nix auf die Reihe, hilfe bitte. ;) |
Re: Unterschiedliche Daten speichern u. auslesen
Delphi-Quellcode:
Damit hast du dann keinen fehler mehr mit dem listenindex! :mrgreen:
procedure TForm1.Button1Click(Sender: TObject);
var i : integer; begin for i := 0 to ListBox1.Items.Count-1 do // Speichern ?? end; |
Re: Unterschiedliche Daten speichern u. auslesen
So ? :mrgreen: (Code nicht getestet, nur mal so getippt)
Delphi-Quellcode:
[6-mal bearbeitet, durchkorrigiert und müsste so laufen]
procedure TFormX.LoadFromFile;
var afile: textfile; i, lb1Count, lb2Count: integer; s: string; begin assignfile(afile, 'dateiname.ext'); reset(afile); readln(afile, s); if s <> 'MyFileIdent' then begin showmessage('Nicht meine Datei, wird nicht geladen!'); exit; end; readln(afile, s); // Load Edit 1 edit1.text := s; readln(afile, s); // Load Edit 2 edit2.text := s; readln(afile, lb1Count); // Anzahl der Listbox1 Einträge lesen readln(afile, lb2Count); // Anzahl der Listbox2 Einträge lesen listbox1.Clear; for i := 0 to lb1Count-1 do // Load Listbox 1 begin readln(afile, s); listbox1.items.add(s); end; listbox2.Clear; for i := 0 to lb2Count-1 do // Load Listbox 2 begin readln(afile, s); listbox2.items.add(s); end; closefile(afile); end; procedure TFormX.SaveToFile; var afile: textfile; i: integer; begin assignfile(afile, 'dateiname.ext'); rewrite(afile); writeln(afile, 'MyFileIdent'); writeln(afile, edit1.text); // Save Edit 1 writeln(afile, edit2.text); // Save Edit 2 writeln(afile, listbox1.items.count); // Anz. der Listbox1 Einträge sp. writeln(afile, listbox2.items.count); // Anz. der Listbox2 Einträge sp. for i := 0 to listbox1.items.count-1 do // Save Listbox 1 writeln(afile, ListBox1.Items.Strings[i]); for i := 0 to listbox2.items.count-1 do // Save Listbox 2 writeln(afile, ListBox2.Items.Strings[i]); closefile(afile); end; |
Re: Unterschiedliche Daten speichern u. auslesen
Delphi-Quellcode:
mach es doch mit streams!
file = evil;
Delphi-Quellcode:
mit dem record ist das ganze zwar ein wenig oversized, aber das prinzip sollte klar sein.
type TEntry = record
length:integer; value:string; end; procedure ListboxSave(lb: TListBox); var stream:TFileStream; temp:TEntry; begin stream:=TFileStream.create('Listbox.lbs',fmCreate); for i:=0 to lb.Items.count-1 do begin temp.length:=length(lb.Items[i]); temp.value := lb.Items[i]; stream.write(temp); end; stream.free; end; zum laden dann:
Delphi-Quellcode:
EDIT: code nullmal bearbeitet und 100% fool proof und DAU-sicher( wenn ich mich nicht vertippt hab :zwinker: )
stream.position:=0;
stream.read(temp.length,sizeof(integer)); stream.read(temp.value,temp.length); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz