AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ini-Sektor auslesen und addieren

Ein Thema von BimboBaggins · begonnen am 25. Jun 2004 · letzter Beitrag vom 26. Jun 2004
Antwort Antwort
BimboBaggins

Registriert seit: 8. Jun 2004
12 Beiträge
 
#1

ini-Sektor auslesen und addieren

  Alt 25. Jun 2004, 00:16
Sers,
Hab schon wieder ein Problem für Euch. Diesmal dürfts aber nichts sein, was wirklich viel Aufwand bedarf (ich brauch nur mal wieder den universal-Befehl für die eierlegende Wollmilchsau, hoffen wir, dass es den diesmal gibt!).
Also Folgendes:
Erstmal ne kurze Info zu meinem Problemprogramm. Diverse Buttons mit Artikel-Beschriftungen, die beim Klicken den Bestand prüfen und runterzählen, sowie den Preis des Artikels zu den Gesamteinnahmen addieren und das ganze dann in 3 ini-files speichern. 1 temp-inifile, 1 für die Tagesabrechnung, 1 für die Monatsabrechnung. Dazu 2 Buttons für "neuer Tag" und "neuer Monats", die nur die Funktion haben den "Verkauft"-Zähler (in der temp-ini-file) wieder auf 0 zu setzen und alles in "Tagesabrechnung" (die 2. inifile) zu speichern, um die Datei 1:1 später zu drucken. Das Problem ist jetzt, dass ich einen Button für "Sonstiges" eingefügt hab, bei dem man in ein input-Fenster die Artikelbeschreibung und den Preis manuell eingeben kann. In der Theorie sah das auch ganz einfach aus: Ich speicher das ganze erst in die temp-ini-file und wenn ich "neuer Tag" drück, wird der Sektor "Sonstiges" ausgelesen, in die Tagesabrechnung geschrieben und in der Temp-ini-file gelöscht. Klingt erstmal nicht schwer, aber bin nun auf mehrere Probleme gestoßen:
Erst wollt ich einfach alles sofort in die Tagesabrechnung und Monatsabrechnung schreiben, nur ergibt sich dann das Problem: Wann soll ich den Sektor "Sonstiges" in "Tagesabrechnung" leeren.. hm.. das würd zu weit führen, das jetzt z erklären, auf jeden Fall geht das nicht, weil mein Programm nur indirekt einen "neuen Tag" erkennt.
Auf jeden Fall bin ich auf den Befehl readsector (oder section? egal) gestoßen und hab den ganzen Sektor jetzt in einen (mir bis dahin unbekannten Dateityp) TString geladen. Beim Kompilieren gabs auch keine Probleme, nur schmiert mir das Programm jetzt immer ab, sobald ich das Zeug ausles und das egal, ob etwas in dem Sektor steht oder nicht. Aber da ja eh der wichtigste Teil noch fehlt, wart ich mal ab, ob er das noch bringt, wenn ich den Einschreibe-Teil geschrieben hab. Und dazu komm ich jetzt (nach der kurzen Vorrede...). Und zwar weiß ich nicht, was ich mit meinem TString jetzt anfangen soll bzw wies in meinem TString jetzt aussieht und was da alles drinsteht. Ich hab auf einen Befehl a la "writesector" gehofft, bei dem man dann den Namen und den TString angibt, aber so was hab ich nicht gefunden. Heißt der Befehl nur anders, oder muss man da irgendwie den TString zerpflücken, um die Sektions 1:1 zu kopieren? Und jetzt wirds nochmal ne Nummer härter (sozusagen für die Schnellen, die mit Aufgabe 1 schon fertig sind und aufs Klingeln warten). Und zwar würd ich gern die ganzen Tagesabrechnungsstrings addieren lassen und in die Monatsabrechnung speichern. Nun bräucht ich also einen Befehl, bei dem irgendwie zurückgegeben wird, welche Posten es in der Sektion gibt und der bei "if vorhanden" das ganze addiert oder "else" neu anlegt. Ja, das wars jetzt, hätt nicht gedacht, dass man ein so kleines Problem derart umschreiben kann (und wahrscheinlich noch die Hälfte vergessen haben kann!).
Danke fürs Lesen schonmal, wers bis hierhin geschafft hat


PS: Falls jemand zufällig eine Auflistung ALLER ini-file-Befehle mit kurzer Beschreibung hat, würd mir das auch viel helfen, denn ich find immer nur Tutorials mit den Standartbefehlen, die mir in 99% der Fälle schon reichen, aber bei solchen Fällen leider nicht helfen. Gibts auch bestimmt bei der Delphi-Hilfe irgendwo aber bei ini-files und commands als Stichwort, find ich nix.
  Mit Zitat antworten Zitat
Nightshade

Registriert seit: 7. Jan 2003
Ort: Menden
192 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: ini-Sektor auslesen und addieren

  Alt 25. Jun 2004, 01:04
Zitat von BimboBaggins:
Auf jeden Fall bin ich auf den Befehl readsector (oder section? egal) gestoßen und hab den ganzen Sektor jetzt in einen (mir bis dahin unbekannten Dateityp) TString geladen. Beim Kompilieren gabs auch keine Probleme, nur schmiert mir das Programm jetzt immer ab, sobald ich das Zeug ausles und das egal, ob etwas in dem Sektor steht oder nicht.
Liegt wahrscheinlich daran, daß du den TStrings Typ nicht Created hast.

Delphi-Quellcode:
var
     liste : TStringlist;
begin
  liste := TStringlist.create; // <-- hier TStringlist "initialisieren"
  ini.ReadSectionValues('Artikel',liste);
  if liste.Values['Sonstiges'] = 'Kaffeethen begin
      // do something;
  end;
  liste.free;
end;
Christian
Killing for peace is like fucking for virginity

Nightshade
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#3

Re: ini-Sektor auslesen und addieren

  Alt 25. Jun 2004, 01:05
DeleteKey
EraseSection
ReadSection
ReadSections
ReadSectionValues
ReadString
TIniFile
UpdateFile
WriteString
DeleteKey
EraseSection
GetStrings
ReadSection
ReadSections
ReadSectionValues
ReadString
Rename
SetStrings
UpdateFile
WriteString
ReadBinaryStream
ReadBool
ReadDate
ReadDateTime
ReadFloat
ReadInteger
ReadTime
SectionExists
WriteBinaryStream
WriteBool
WriteDate
WriteDateTime
WriteFloat
WriteInteger
WriteTime

Hmmm das ist so ziemlich alles was ich gefunden habe.
Bei dem Befehl ReadSections (denke mal das du den meinst) kannst du aber nur den Namen aller Schlüssel innerhalb eines bestimmten Abschnitts der INI-Datei ermitteln und es einer Stringliste übergeben.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Benutzerbild von NicNacMan
NicNacMan

Registriert seit: 28. Mai 2004
Ort: Hamburg
98 Beiträge
 
Delphi 2005 Personal
 
#4

Re: ini-Sektor auslesen und addieren

  Alt 25. Jun 2004, 01:23
hi,
is ja n netter kleiner roman geworden

du kannst alle einträger einer section auslesen, und sie dann einzelnd in eine neue schreiben:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: Integer;
  srcsection, dessection, eintrag, wert: String;
  tmplist: TStrings;
begin
  srcsection := 'bla1';
  dessection := 'bla2';
  myini := TINIFile.Create('C:\test.ini');
  tmplist := TStringList.Create;
  try
    myini.ReadSection(srcsection, tmplist);
    for i := 0 to Pred(tmplist.Count) do
      begin
        eintrag := tmplist.Strings[i];
        wert := myini.ReadString(srcsection, eintrag, '');
        myini.WriteString(dessection, eintrag, wert);
      end;
  finally
    tmplist.Free;
    myini.free;
  end;
end;
wenn die einträge schon vorhanden sind, werden sie einfach überschrieben
The Double-Crunch-Peanuts!
SwapIt:
  Mit Zitat antworten Zitat
BimboBaggins

Registriert seit: 8. Jun 2004
12 Beiträge
 
#5

Re: ini-Sektor auslesen und addieren

  Alt 26. Jun 2004, 19:00
Wollt nur mal vorbeischauen und mich schonmal bedanken. Nicht, dass Ihr meint ich les das gar nicht. Hatte nur bisher keine Zeit das auszuprobieren, warum kann ich hier leider nicht aufführen, n bißchen Stoff brauch ich ja noch für meinen 2. Roman

@Nightshade: Dass man den initialisieren muss, wusste ich wirklich nicht, das wird wohl der Grund für meinen ersten Fehler sein, Danke!

@Net7: Danke für die Mühe, is mir unangenehm das sagen zu müssen, aber die Liste kommt auch wenn ich nur ini. eingeb, da kommt bei mir dann so ne Liste aller möglichen Befehle, is vielleicht erst ab einer bestimmten Delphi-Version so, hätt ich wohl dazusagen sollen, sry!
Aber die Beschreibung, die ich eigentlich gesucht hab war eh die für readsections, dachte halt nur für die Zukunft wär so ne Tutorial-Site, auf der alles beschrieben steht gut. Also Danke nochmal dafür, das bringt mich auch schonmal weiter, denn ich hab bisher gedacht der speichert auch die Werte dazu bzw speichert das als 'Bezeichner1=Wert1' oder so. Dann muss ich wohl noch irgendwie den TString zerpflücken, dann in der tempini-Datei nach dem Wert fragen und den dann in die neue Datei schreiben.

@NicNacman: Das sieht schonmal sehr vielversprechend aus, aber zum sicheren Verständniss frag ich doch nochmal nach:
Pred(tmplist.Count);
Weiß nicht genau wie sich das zusammensetzt, aber der Befehl gibt zusammen praktisch den Wert der letzten Zeile im TString an.
tmplist.Strings[i];
Das scheint ziemlich eindeutig zu sein, damit sprech ich wohl die Zeile i im Tstring an (Wusst ich aber auch vorher nicht wie ich das mach)

Also wenn ich auf den Button "neuer Tag" drück, werden praktisch alle "Namen der Schlüssel" ohne Wert in den TString gespeichert und dann wird in einer Schleife von 0 bis zur Zeilenanzahl des TStrings immer geprüft, ob bereits ein Wert für den Schlüssel i in "Tagesabrechnung.ini" gespeichert ist und gegebenfalls addiert mit dem Wert des Schlüssels der "Temp.ini" und in die Tagesabrechnung geschrieben... klingt eigentlich eigentlich ganz einfach und so als würds klappen. Danke!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz