Delphi Editfelder in Datei schreiben,Lesen

znysk

Erfahrenes Mitglied
Ich habe einige Editfelder und möchte diese in ner Datei Speichern, und später wieder lesenund in die Feler schreiben, kann mir da jemand helfen, da ich noch nie mit Dateien gearbeitet habe!
:( :( :(
es könnte auch ein kleines Beispielprogramm sein

DANKE
 
ich hab einfach ma nen bißchen code aus nem programm von mir kopiert, ich habs unter anderem zum speichern eines gezeichneten graphen genommen, is aber eigentlich ganz simpel:
hier erstma zum öffnen, der liest mit dem readln befehl eine zeile nach der anderen aus.
den opendialog kannst du einfach einfügen, das is nen object in delphi
Code:
var mbfv:textfile;

if opendialog1.execute then begin
  if fileexists(opendialog1.FileName) then begin

    assignfile(mbfv,opendialog1.FileName);
    reset(mbfv);
    readln(mbfv,x1);
  end;
end;

das speichern geht ähnlich:
Code:
  assignfile(mbfv,savedialog1.FileName);
  rewrite(mbfv);
  writeln(mbfv,'text der geschrieben werden soll');
beim speichern musst du nur aufpassen, da der dateien überschreibt falls die vorhanden sind
musst also noch über ne abfrage (if fileexist('pfad')) gucken ob die datei schon existiert und dann halt ne abfrage reinbaun

so, ich hoffe das reicht, wenn du damit nich klar kommst meld dich...
 
Hallo,

das kannst du am besten per ini-Dateien lösen. Die Edit-Felder kannst du per
Code:
  TEdit(FindComponent('Edit'+IntToStr(i))).Text
in eine Datei schreiben. (Code ist nicht vollständig!)
 
Ini datei gut und schön .. aber diese kann ohne zu trixen nur 64 KB aufnehmen mein vorschlag wäre :

(die speichern-procedure)
Code:
procedure Speichern;
 var STRList : TStringList;
     filename : string;
     i : integer;
begin
 STRList := TStringList.create;
 Filename := 'C:\keineAhnung.txt';
 // Hier nun die zuweisungen
 for i := 0 to anzahl der edits -1 do
  begin
STRList.add(TEdit(FindComponent('Edit'+IntToStr(i+1))).Text);
  end;  
 STRList.SaveToFile(filename);
end;

(und die Lade-procedure)
procedure Laden;
 var STRList : TStringList;
     filename : string;
     i : integer;
begin
 filename := 'C:\keineAhnung.txt';
 STRList := TStringList.create;
 STRList.LoadFromFile(filename);
 for i := 0 to anzahl der edits-1 do
 begin
TEdit(FindComponent('Edit'+IntToStr(i+1))).Text := STRList.Strings[i];
 end;
end;

sicherlich kann der filename auch global definiert werden und per Open bzw Savedialog bequem gesetzt werden und auch die art des wegspeicherns in die datei verfeinert werden .. aber dies soll ja nur als mögliche alternative gezeigt werden
ich hoffe das dies deinen vorstellungen nahe kommt...
 
Zuletzt bearbeitet:
Hallo Ihr!

Das mit dem Datein einlesen kann ich schon, nur würde mich interessieren wie ich nach begriffen suchen kann?

Ich suche z.B. den Begriff Region Name="Argentinien" aus einer XML Datei die ich eingelesen habe und will dann "Argentinien" in meine MySql Datenbank schreiben.

Des MySql krieg ich schon hin nur den Begriff suchen? :(

Thx schoma im Voraus!
 
du könntest beispielsweise eine textdatei zeilenweise einlesen (mit readln) und dann in jeder zeile nach dem entsprechenden string suchen. wenn der string in der zeile gefunden wurde, schreibst du ihn in die datenbank und fängst von vorne an.
das ist zwar bestimmt nicht die beste lösung, aber sollte funktionieren.
 
Ja genau das meine ich :) aber wie die Zeile mit meinem String vergleichen?

ich hab:
Code:
        ReadLn(Datei, Buffer);
        // In Buffer steht die Zeile
 
Code:
var
  i: Integer;
  s: String;
  z: String;
begin
  z := 'string aus mehr als einem wort';
  i := Pos('wort', z);
  if i > 0 then // deinen String in der Zeile gefunden
  begin
    s := Copy(z, i, Length('wort'));
    ShowMessage(s);
  end;
end;

reines vergleichen geht zwar eigentlich mit "if stringA = stringB then ...", aber da du ja einen teilstring suchst, bist du mit der pos()-funktion besser bedient.
 
Hab noch ein Prob :(

Ich brauch nen String aus ner XML Datei (bzw mehrere) einer z.B. soll die gesamten Zeichen zwischen "<Section Name="ContactAdress">" und "</Section>" enthalten.

Mein Code sieht bis jetz (umständlich *gGg*) folgendermaßen aus:

Code:
       //Schleife wiederholen, bis Ende der Datei erreicht ist
     while not EOf(Datei) do begin
       //Aus Datei zeilenweise lesen
         ReadLn(Datei, Buffer);
         starting := Pos(wanted_start, Buffer);
         if starting > 0 then // deinen String in der Zeile gefunden
         begin
         strsta := Copy(Buffer, starting, Length(wanted_start));
           ShowMessage(InttoStr(starting));
         end;

         ending := Pos(wanted_end, Buffer);
         if ending > 0 then // deinen String in der Zeile gefunden
         begin
         strend := Copy(Buffer, ending, Length(wanted_end));
           ShowMessage(InttoStr(ending));
         end;

       //ShowMessage(Buffer);
       //Den gelesenen Buffer ausgeben
       Memo.Lines.Add(Buffer);
     end;

jetz krieg ich zwar in starting die Position vom < section... und in ending die Position von </section> aber nicht die Zeilen.

Nun meine Frage(n):

Wie kann ich auch die Zeile speichern?
Wie krieg ich den gewünschten bereich zwischen starting und ending in einen String?

CyA und schoma danke!
 
Zurück