Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Unterschiedliche Daten speichern u. auslesen (https://www.delphipraxis.net/48319-unterschiedliche-daten-speichern-u-auslesen.html)

PierreB 23. Jun 2005 15:14


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,

ibp 23. Jun 2005 15:17

Re: Unterschiedliche Daten speichern u. auslesen
 
wieviele datensätze sind es denn?

PierreB 23. Jun 2005 15:22

Re: Unterschiedliche Daten speichern u. auslesen
 
Zitat:

Zitat von ibp
wieviele datensätze sind es denn?

Die Anzahl der Items in den Listboxen kann stark variieren, ich würde also sagen von 0-200 Items pro Listbox. Bei den Edits jeweils unter 150 Zeichen. Das die Listboxen-Items-Anzahl variiert macht mich noch verwirrter wie ich das anstellen soll. :-(

100nF 23. Jun 2005 15:27

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

PierreB 23. Jun 2005 15:37

Re: Unterschiedliche Daten speichern u. auslesen
 
Zitat:

Zitat von urbanbruhin
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

Ja das geht so aber nicht. ;)

Ich möchte ja die Daten beider Listboxen und den Edits in einer einzigen Datei haben. ;)

jfheins 23. Jun 2005 15:43

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:
16 23 39 2 <Erster Strig; Pos: 16; Läge: 23><zeiter String; Anfang: 39; Länge: 2>
Quasi ein Inhaltsverzeichnis :)

Das ganze lässt sich relativ einfach mit streams realisieren ;)

PierreB 23. Jun 2005 16:04

Re: Unterschiedliche Daten speichern u. auslesen
 
Delphi-Quellcode:
Listbox1 <'Gabi Mauserich' Pos: 1>
Listbox1 <'Olli Bierhoff' Pos: 2>
ListBox2 <'Peter Knoblauch' Pos: 1>
Edit1 <'Das ist aber komisch...'>
So könnte ich mir das nur vorstellen (Leider habe ich keine Ahnung von Streams :oops: ).
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:
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 1 to ListBox1.Items.Count do
// Speichern ??
end;
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.

:wall: Ich krieg heut nix auf die Reihe, hilfe bitte. ;)

Pitch-Bull 23. Jun 2005 16:59

Re: Unterschiedliche Daten speichern u. auslesen
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
i : integer;
begin
for i := 0 to ListBox1.Items.Count-1 do
// Speichern ?? 
end;
Damit hast du dann keinen fehler mehr mit dem listenindex! :mrgreen:

turboPASCAL 23. Jun 2005 17:00

Re: Unterschiedliche Daten speichern u. auslesen
 
So ? :mrgreen: (Code nicht getestet, nur mal so getippt)

Delphi-Quellcode:
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;
[6-mal bearbeitet, durchkorrigiert und müsste so laufen]

DGL-luke 23. Jun 2005 22:06

Re: Unterschiedliche Daten speichern u. auslesen
 
Delphi-Quellcode:
file = evil;
mach es doch mit streams!

Delphi-Quellcode:
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;
mit dem record ist das ganze zwar ein wenig oversized, aber das prinzip sollte klar sein.

zum laden dann:
Delphi-Quellcode:
stream.position:=0;
stream.read(temp.length,sizeof(integer));
stream.read(temp.value,temp.length);
EDIT: code nullmal bearbeitet und 100% fool proof und DAU-sicher( wenn ich mich nicht vertippt hab :zwinker: )


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.
Seite 1 von 2  1 2      

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