Entwickler-Ecke

Dateizugriff - ini - Dateien Lesezugriff mit if then Abfrage


ChrisCross - Sa 13.10.12 14:50
Titel: ini - Dateien Lesezugriff mit if then Abfrage
Hallo,

ich habe mein Kassenprogramm nocheinmal neu geschrieben (das alte kann man hier sehen: http://www.entwickler-ecke.de/viewtopic.php?t=110289&postorder=asc&start=0 und habe die Buttons weggelassen und sie durch ein Eingabefeld ersetzt)

Jetzt habe ich eine IF THEN abfrage gemacht. Also IF Barcode := '1234' THEN Warenliste.Items.Add('Käse (100g)' + Tab + 'Algäuer Alm' + Tab + '24546' + Tab + '0,60 €'); usw.

Wenn man aber nur die .exe Datei hat kann man ja keine Produkte hinzufügen. Ich habe jetzt einen neuen Tab erstellt mit Neue Produkte. Dort kann man alle nformationen eingeben. Das Funktioniert auch gut.

Ich wollte jetzt '1234' usw. einfach ersetzen. Erstmal einlesen und speichern


Delphi-Quelltext
1:
2:
3:
INummer := ini.ReadString(Spe, 'Artikelnummer''');
//...
IF Nam = Nummer THEN  Warenliste.Items.Add(Produktname + Tab + Firma + Tab + Nummer + Tab + PreisBon);

und dann ersetzen. Aber eigendlich funktioniert das ja nicht. Woher soll Delphi wissen welchen Abschnitt und welche "Nummer" ich meine. Wie mache ich das?


jfheins - Sa 13.10.12 15:06

Speichere die ganzen Produkte am besten in einer Datenbank oder einer Datei. (Datenbank ist professioneller, Datei am Anfang einfacher)
Wenn du eine Datei hernimmst, kannst du diese beim Programmstart einlesen und als Liste oder so im Speicher halten.
Sobald ein Barcode eingegeben wird, durchsuchst du die Liste und liest den zugehörigen Text aus.

Ich empfehle dir, eine kleine Klasse zu schreiben die alle Infos zu einem Artikel enthält. Dann deklarierst du eine Variable des Typs TObjectList und speist für jeden Barcode ein Objekt in die Liste ein.
Bei kleinen Datenmengen kannst du die Liste dann einfach von vorne bis hinten durchgehen um zu einem Barcode den Artikel zu finden.
Bei größeren Datenmengen solltest du die Liste sortieren damit du schneller suchen kannst.


Narses - Sa 13.10.12 15:16

Moin!

So wie ich das sehe, hast du doch schon sowas wie ein CSV-Format in deiner Warenliste. Also dürfte der einfachste Weg sein, diese direkt zu speichern. :idea: ;)

Delphi-Quelltext
1:
Warenliste.Items.SaveToFile('Waren.csv');                    

Und bei Programmstart:

Delphi-Quelltext
1:
Warenliste.Items.LoadFromFile('Waren.csv');                    

Fertig. :D

cu
Narses


ChrisCross - Mo 15.10.12 18:45

Danke für eure Antworten. Könntet ihr mir aber trotzdem bei der IF THEN Abfrage helfen. Also wo man den Produktcode eingibt, dass er den mit der ini Datei Vergleicht und dann den Namen und den Preis aus der gleichen Gruppe, wo der Produktcode drinsteht ausgiebt.


jfheins - Mo 15.10.12 21:09

Also den konkreten Teil kannst du nicht nur mit einer if-Abfrage lösen, da brauchst du noch eine Schleife:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
// Beispiel für den Code, der die Liste befüllt. Idealerweise sollte das aus der Datei geladen werden.
Warenliste := TObjectlist.Create();
Warenliste.Add(TWare.Create('Algäuer Alm''Käse (100g)'2454660)); // Name, Kategorie, Artikelnummer, Preis in cent
Warenliste.Add(TWare.Create('Haribo Goldbären''Quengelware'1234149));

// Barcode wurde gescannt
for i := 0 to Warenliste.Length - 1 do
begin
  if Warenliste[i].Artikelnummer = Barcode then
    Einkaufskorb.Add(Warenliste[i]);
end;

Wenn dir das nicht hilft ist vielleicht deine Frage etwas wage gestellt. Du solltest auf jeden Fall den Barcode direkt beim Produkt speichern und kannst dann in einer Liste das Produkt suchen sobald du den Barcode kennst.


Narses - Mo 15.10.12 21:37

Moin!

user profile iconChrisCross hat folgendes geschrieben Zum zitierten Posting springen:
Könntet ihr mir aber trotzdem bei der IF THEN Abfrage helfen. Also wo man den Produktcode eingibt, dass er den mit der ini Datei Vergleicht und dann den Namen und den Preis aus der gleichen Gruppe, wo der Produktcode drinsteht ausgiebt.
Sorry, ich kann dir nicht folgen. :nixweiss: Zeig mal deine INI-Datei. :les:

cu
Narses


bummi - Mo 15.10.12 23:06

Wenn Du schon unbedingt bei einer INI bleiben willst wirst Di eine Struktur in der Art brauchen

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
[123]
Produkt=Käse (100g)
Firma=Algäuer Alm
Nummer=1234
Preis=12.34
Valid=1
[234]
Produkt=Wurst (100g)
Firma=Schlachter
Nummer=815
Preis=33.22
Valid=1


Delphi-Quelltext
1:
2:
3:
4:
if ini.ReadBool(Barcode,'Valid',0)=1 then
  begin
            Warenliste.Add(ini.ReadString(Barcode,'Produkt','') + TAB .......
        end;


ChrisCross - Di 16.10.12 07:15

Hier ist das ganze Programm.

Ich glaube ich habe meine Frage dumm gestellt :oops: , im Programm seht ihr dann was ich meinte. Ich habe die alte Variante nur auskommentiert.

(Ich habe auch versucht den Quellcode zu strukturieren. Hoffentlich ist es mir gelungen)


bummi - Di 16.10.12 07:29


Delphi-Quelltext
1:
2:
3:
4:
  try

   spe := ArtikelNummer.Text;  // <<< das fehlt in Deinem Code
   IProduktname :=ini.ReadString(Spe, 'Produktname''');