Entwickler-Ecke
Dateizugriff - Werte mit Datum in eine INI File Speichern
Eissbear - Do 30.03.06 13:05
Titel: Werte mit Datum in eine INI File Speichern
Hallo
ich muss eine kleine Datenbank schreiben mit Folienpreise eines Herstellers und dem Datum ab wann diese Gültig ist.
Also im Prinzip muss ich später dem Programm sagen können Hersteller XY und dann Datum TT.MM.JJ und das Programm sagt mir den Folienpreis. Wenn zu dem Datum kein Folienpreis da ist soll er das was Zeitlich gesehen das letzte vor dem Datum war nehmen.
Ich dachte da an eine INI file aber dort kann ich ja nur 3 Werte speichern, nun die Frage ^^ ist es möglich dem Wert ein Datum richtig zuzuordnen, dass das Programm auch als Datum interpretiert?
Wenn nicht, welchem Datei Typ kann ich 5 Werte zuordnen? Oder hat jmd ne andere Lösung wie er leichter das voherige Datum wählt?
Ich dachte das ich ihn fals er das Datum nicht findet halt erst bei dem Monat und Jahr nach einem Tag sucht der vor dem angegebenen ist und dann halt einen Monat früher, usw.
Hoffe es ist deutlich geworden was ich will^^.
Schonmal vielen Dank im vorraus
Mfg Eissbear
Edit: Achja wie lasse ich Delphi die *.ini file im selben ordner speicher wie das Projekt ist? Er speichert bei angabe keines Pfades in den Windows Ordner des ist irgendwie unpraktisch. Danke
Kroko - Do 30.03.06 13:21
nimm die Firma als Sektion
mache eine Eintrag Count=Anzahl
Beispiel:
[SuchMinAG]
Count=1
ItemP0= 1,10€ // Preis[0]
ItemD0= 10.10.2004 // Datum[0]
...
Marc. - Do 30.03.06 13:23
@ edit:
dazu bietet sich "extractfilepath(application.ExeName)" an. Dieses Codeschnipsel gibt den pfad zu deiner Exedatei an.
Mit memo.lines.savetofile((extractfilepath(application.ExeName))+'Datei.ini');
kannst du nun deine ini datei direkt in dem ordner, in dem deine exe-datei liegt, speichern
statt "memo.lines" musst du natürlich deine komponente angeben, deren inhalt du speichern willst ;)
Eissbear - Di 04.04.06 14:09
Hallo,
Sry wegen der späten Meldung hatte sehr viel um die Ohren und kam nicht dazu das Programm weiter zu schreiben.
Mit der INI file richtig speichern hats jetzt geklappt danke.
Aber was mir ein ein Count eintrag bringen soll verstehe ich nicht, ich kann nicht vom User erwarten alles in cronologischer Reihenfolge anzugeben.
Die Einträge sehen eher so aus
[Firma]
12.03.05 = 1,50
19.04.05 = 1,52
...
vn daher denke ich das meine einzige Möglichkeit ist beim Lesen das Datum zuerst auszulesen und den String in einzelne Zahlen zu unterteilen und dann so näher das Datum zu spezifizieren.
Das mit dem String zerteilen bekomme ich schon hin. Aber wie komme ich nur ans Datum? Erst alles in eine ListBox schreiben ist klar und dann?
Hätte noch eine Idee das ich vllt einfach bei der eingabe des Datums das Format nen bissel umänder in z.B. 12.10.05 -> 051012
Dann könnte ich einfach die nächst größe Zahl suchen und die nächst kleinere Zahl und das dann einfach ausgeben.
Na ich weiss halt net stehe voll auf dem Schlauch bin für jede Idee Dankbar.
Mfg Eissbear
Kroko - Di 04.04.06 14:46
Ich hätte es so gemacht (ungetestet; Setlength sollte man so nicht verwenden (zu überarbeiten)):
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52:
| unit unitTest;
interface type TMyRecord = record Firma: String; Datum: TDateTime; Preis: Single; end; TMyArray = array of TMyRecord;
procedure LoadFromIniFile (const AFileName: String);
implementation
uses Classes, IniFiles, SysUtils;
var MyArray: TMyArray;
procedure LoadFromIniFile (const AFileName: String); var F: TIniFile; S: TStringList; I,J,C,L: Integer; begin if FileExists (AFileName) then begin Finalize (MyArray); F := TIniFile.Create (AFileName); S := TStringList.Create; F.ReadSections(S); for I := 0 to S.Count -1 do begin C := F.ReadInteger(S[I],'Count',0); L := Length(MyArray); SetLength (MyArray,L+C); for J := 0 to C-1 do begin MyArray[L+J].Firma := S[I]; MyArray[L+J].Datum := F.ReadDateTime(S[I],'ItemD'+IntToStr(J),0); MyArray[L+J].Preis := F.ReadFloat(S[I],'ItemP'+IntToStr(J),0) end; end; S.Free; F.Free; end; end;
end. |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!