Geschlossen: Inhalte eines Programmes speichern ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Geschlossen: Inhalte eines Programmes speichern ?

Beitrag von jaslaz »

Ich bin grad dabei ein Programm zu machen, indem man eingibt wie viel man noch von einer Ware im Haushalt hat.
Wie schaffe ich es, dass die Inhalte beim nächsten starten des Programmes noch genauso sind, wie ich sie vorher eingegeben habe.

Ich denke an einen Speicherbutton oder sowas.

hoffe jmd kann mir helfen
Zuletzt geändert von jaslaz am Do 2. Sep 2010, 17:12, insgesamt 3-mal geändert.

Live
Beiträge: 144
Registriert: So 22. Aug 2010, 16:06
OS, Lazarus, FPC: Backtrack 5 RC4 - 64bit Gnome
CPU-Target: 64bit
Wohnort: NRW
Kontaktdaten:

Re: Inhalte eines Programmes speichern ?

Beitrag von Live »

Ich ignoriere jetzt mal den anderen Thread von dir und schreibe dir in diesem.

Es gibt 2 Möglichkeiten deine Einstellungen zu speichern:

1. Mit INI-Dateien. Das ist die etwas ältere Version, aber dennoch zuverlässig und dazu recht simpel.

2. Mit XML-Dateien. Die modernere Variante und auch Platform-unabhängig.

Die Dateien kannst du dann z.B. im Programm-Ordner deines Projektes speichern und mit einem Form.Create Ereignis wieder laden.

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Inhalte eines Programmes speichern ?

Beitrag von jaslaz »

Das mit den zwei threads wollt ich nich aber egal.


kannst du mir das mit der ersten variante noch mal genauer erklären?

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Inhalte eines Programmes speichern ?

Beitrag von Euklid »

Hallo jaslaz,

die Inhalte kann man, wie live schon schilderte, in Dateien abspeichern. Einsteigern empfehle ich das Abspeichern in Textdateien, das ist wohl das Einfachste. Durch diese Routine speicherst Du einen Text in eine Datei ab:

Code: Alles auswählen

Var F : text;
    Inhalt:string;
 
begin
  Inhalt:='Dies ist der zu speichernde Programminhalt.';
  AssignFile(F,'textfile.ini');
  Rewrite(F);
  Writeln (F,Inhalt);
  CloseFile(F);
end;
Der Text befindet sich dann in der Datei textfile.ini . Du kannst ihn dann mit den folgenden Zeilen wieder auslesen:

Code: Alles auswählen

Var F : text;
    Inhalt:string;
 
begin
  AssignFile(F,'textfile.ini');
  Reset(F);
  Readln (F,Inhalt);
  CloseFile(F);
end;
(Code ist ungetestet)

Noch eine Bemerkung: Bitte keine Doppelposts erstellen.

Viele Grüße, Euklid

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Inhalte eines Programmes speichern ?

Beitrag von jaslaz »

das funktioniert nicht : er zeigt eine fehlermeldung hinter 'textfile.ini'

Benutzeravatar
theo
Beiträge: 10895
Registriert: Mo 11. Sep 2006, 19:01

Re: Inhalte eines Programmes speichern ?

Beitrag von theo »

Ja, ein Speicherbutton ist die Lösung.
Nimm einfach einen TSpeicherButton und gut is. ;-)

Euklid's Vorschlag ist viel zu einfach, ich würde das in Assembler machen.
Bitte denke daran: Klassen benutzen wie TStringList oder TIniFile ist gaaaanz böse!
Also immer so kompliziert wie möglich!

:wink:

Benutzeravatar
theo
Beiträge: 10895
Registriert: Mo 11. Sep 2006, 19:01

Re: Inhalte eines Programmes speichern ?

Beitrag von theo »

Die obige Antwort war an Euklid gerichtet, nicht an dich jaslaz.

Du musst dir überlegen, wie die Daten strukturiert sind, die du speichern möchtest.
Das können wir so nicht wissen.
Wenn es nur eine Liste ist, die du in einem TMemo hältst, dann reicht eigentlich Memo1.SaveToFile und Memo1.LoadFromFile.
Sonst braucht es vllt. eher eine Datenbank.

Überlege dir mal, wie deine Daten genau aussehen, dann finden wir eine Lösung für dich.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Inhalte eines Programmes speichern ?

Beitrag von carli »

Persistenz ist ein Programmparadigma, das noch in keiner Programmiersprache eingebaut wurde. Es fehlt momentan noch die zündende Idee, wie man so was realisieren sollte.
Zuletzt geändert von carli am Sa 28. Aug 2010, 21:40, insgesamt 1-mal geändert.

Benutzeravatar
theo
Beiträge: 10895
Registriert: Mo 11. Sep 2006, 19:01

Re: Inhalte eines Programmes speichern ?

Beitrag von theo »

carli hat geschrieben:Konsistenz ist ein Programmparadigma, das noch in keiner Programmiersprache eingebaut wurde. Es fehlt momentan noch die zündende Idee, wie man so was realisieren sollte.
Meinst du Persistenz? Wir wollen jaslaz aber doch jetzt nicht ein OPF aufschwatzen, oder? :lol:

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Inhalte eines Programmes speichern ?

Beitrag von carli »

theo hat geschrieben: Meinst du Persistenz?
Jap, editiert.

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Inhalte eines Programmes speichern ?

Beitrag von Euklid »

theo hat geschrieben:Die obige Antwort war an Euklid gerichtet, nicht an dich jaslaz.
Euklid findet seinen Ansatz ganz einfach. ;)

felix96
Beiträge: 287
Registriert: So 29. Nov 2009, 17:44
CPU-Target: 32BitWin+64bitUbunt

Re: Inhalte eines Programmes speichern ?

Beitrag von felix96 »

Ich würds so machen:

Code: Alles auswählen

Procedure OnSpeicherbuttonclick(Sender: Tobject);//Das kommt wenn mann doppelt auf den Button klickt
Var Txt: Tstrings
Begin
Txt:=Tstringlist.Create;
Txt.Clear;
Txt.Add(Edit1.Text);
Txt.Add(Label1.Text);//z.B.
//...
Txt.SavaToFile('Bla.Bla');
Txt.Free;
End;
 
//Wiederherstellen:
//On Create;
Var Txt: Tstrings;
Begin
If Fileexists('Bla.Bla') then//bin mir nicht sicher ob der Befehl so richtig geschriben ist
begin
Txt:=Tstringlist.Create;
Txt.LoadFromFile('Bla.Bla');
Edit1.Text:=Txt[0];
Label1.Caption:=Txt[1];//z.B.
//usw.
Txt.Free;
end;
Oder Einfach mal den Namen, dessen was du spichern willst eingeben, und dann einen Punkt, und Strg+Space drücken.
Wenn es hier SaveToFile gibt, kannst du es auch so Speichern:

Code: Alles auswählen

{Speichern} ListBox1.SaveToFile('Bla.Bla');
{Wiederherstellen} ListBox1.LoadFromFile('Bla.Bla');
Aller Code ist ungetestet...
Danke schonmal für eure Antworten
it´s not a bug, it´s a feature!

Benutzeravatar
theo
Beiträge: 10895
Registriert: Mo 11. Sep 2006, 19:01

Re: Inhalte eines Programmes speichern ?

Beitrag von theo »

Euklid hat geschrieben:
theo hat geschrieben:Die obige Antwort war an Euklid gerichtet, nicht an dich jaslaz.
Euklid findet seinen Ansatz ganz einfach. ;)
Das findet aber nur Euklid. ;-)
Ich finde man sollte dieses AssignFile/Reset Zeug ins Museum stellen.
Mal ganz abgesehen davon, ist dein Vorschlag nicht ganz sauber. Es wird ja noch kryptischer:

Code: Alles auswählen

{$i-}
  Reset (f);
  {$i+}
  If IOresult<>0 then
    writeln ('File ',paramstr(1),' doesn''t exist')
  else
    writeln ('File ',paramstr(1),' exists');
Aber das eigentliche Problem ist, dass jaslaz eigentlich noch gar nicht mal weiss, wie er die Frage formulieren soll (SpeicherButton?).
Dann sollte man ihm nicht gleich diesen Jurassic-Code an den Kopf schmeissen, sondern erst mal herausfinden, was er eigentlich benötigt.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Inhalte eines Programmes speichern ?

Beitrag von mse »

jaslaz hat geschrieben: Ich denke an einen Speicherbutton oder sowas.

hoffe jmd kann mir helfen
Mit Lazarus kann ich dir leider nicht helfen. In MSEgui gibt es eine entsprechende Komponente, tstatfile aus dem tab 'NoGui'. Viele MSEgui Komponenten haben die Eigenschaft 'statfile'. Wenn die 'statfile'-Eigenschaft einen Verweis auf eine tstatfile Komponente enthält, wird der Zustand der Komponente in einer durch tstatfile geschriebenen Datei gespeichert. Wird die tstatfile Komponente in der 'statfile' Eigenschaft des Hauptformulares eingetragen, geschieht das Laden und Speichern automatisch. Zudem werden Grösse und Position des Formulares ebenfalls gespeichert.
Beispiel:
Ein Eingabeformular mit einem Datum- einem Text- und einem Fliesskommazahl-Eingabefeld soll seinen Zustand speichern.
- 'Project'-'New'-'From Template'.
- 'default.prj' auswählen.
- Projekt Ort auswählen, Projekt Dateinamen eintragen 'OK' drücken, das Projekt wird angelegt.
- 'View'-'Component Palette'-'Edit', ein tdatetimeedit, ein tstringedit und ein trealedit auf dem Formular platzieren.
- Aus dem tab 'NoGui' ein tstatfile im Formular platzieren.
- In den 'statfile' Eigenschaften des Formulares und den drei Eingabefeldern diese tstatfile Komponente auswählen.
- F9 drücken, fertig. :-)

Martin
stat.png

jaslaz
Beiträge: 58
Registriert: Sa 28. Aug 2010, 18:30
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit

Re: Inhalte eines Programmes speichern ?

Beitrag von jaslaz »

felix96 hat geschrieben:Ich würds so machen:

Code: Alles auswählen

Procedure OnSpeicherbuttonclick(Sender: Tobject);//Das kommt wenn mann doppelt auf den Button klickt
Var Txt: Tstrings
Begin
Txt:=Tstringlist.Create;
Txt.Clear;
Txt.Add(Edit1.Text);
Txt.Add(Label1.Text);//z.B.
//...
Txt.SavaToFile('Bla.Bla');
Txt.Free;
End;
 
//Wiederherstellen:
//On Create;
Var Txt: Tstrings;
Begin
If Fileexists('Bla.Bla') then//bin mir nicht sicher ob der Befehl so richtig geschriben ist
begin
Txt:=Tstringlist.Create;
Txt.LoadFromFile('Bla.Bla');
Edit1.Text:=Txt[0];
Label1.Caption:=Txt[1];//z.B.
//usw.
Txt.Free;
end;

Code: Alles auswählen

Edit1.Text:=Txt[0];


In der Zeile zeigt er mir immer Diese Fehlermeldung:

unit1.pas(52,6) Error: Identifier not found "Edit1"

Antworten