Autor |
Beitrag |
$ebbi
Beiträge: 35
|
Verfasst: Sa 12.03.11 20:58
hi,
angennommen ich hab einen string hallo und hallo:= 'edit1.text:= ' #39 + 'hallo' + #39 jetzt will ich quasi den string in einen button als befehl schreiben, also sobald ich auf den button klicke soll das im edit stehen. das alles will ich aber nur mithlife des strings erreichen. geht das?
mach das vllt mal an meinem aktuellen problem deutlich. tippt man in ein edit eine bestimmte nummer, so wird diese einem produkt zugewissen. das programm soll aber um neue produkte erweitert werden können dazu gibt man alles in bestimmte felder ein un das programm macht daraus den passenden code. dieser code wird in eine txt geschrieben. das programm müsste diesen code jetzt aber ins programm integrieren können. ohne das man selbst was am programm umschreiben muss.
|
|
Gausi
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 12.03.11 21:04
Was du suchst, nennt sich Parser oder auch Interpreter. Wird öfter mal nachgefragt, und Links zu einem finden sich hier bestimmt. Die such ich aber nicht raus, da ich mir fast 100%ig sicher bin, dass sich dein Problem einfacher und eleganter lösen lässt.
Was genau sollen denn die einzelnen "Produkte" können? Sollen da nur Informationen zu angezeigt werden, oder soll der Anwender wirklich eigene Funktionen in das Programm einbauen können?
_________________ We are, we were and will not be.
|
|
$ebbi
Beiträge: 35
|
Verfasst: Sa 12.03.11 21:12
wenn ich wüsste wonach ich genau suchen sollte kein problem
meine scchwester hat von meinem dad einen scanner bekommen (auch software-engineeur aber anderes gebiet ), damit kann sie barcodes scannen und kaufladen spielen . da ich "nur" schüler bin hab ich des jetzt ganz einfach gelöst, jedem code wird einfach das produkt zugeordnet und dazu noch der preis.
also z.B. 123456789 Eistee 1,00€
das programm macht das was eine normale Kasse auch macht, zählt alles zusammen, schreibt auf kassenzettel, etc.
zusätzlich muss das programm aber auch neue produkte "lernen" und die soll meine schwester selbst reinmachen können. deshalb der ganze aufwand. sie kann also im programm alles angeben also nummer, name, preis. das wird dann alles fertig in die txt geschrieben. daraus soll dann der code ausgelesen werden und quasi ins programm übernommen werden.
|
|
Gausi
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 12.03.11 21:23
Na, das ist doch eine klassische Datenbank-Anwendung. Da brauchst du sowas nicht.
Folgendes Grundprinzip:
In einem Fenster machst du die Dateneingabe. Da hast du ein Feld für "Name", "Nummer", "Preis", usw. Diese Eingaben speicherst du. Ob du dafür Objekte in einer ObjectList oder einfach ein Record in einem Array nimmst, ist erstmal wurscht.
Diese Liste von Daten speicherst du in einer Datei - meinetwegen einer Textdatei.
Für das eigentliche Programm lädst du aus dieser Textdatei die Daten wieder in den Speicher. Wenn du dann "an der kasse" einen Barcode eintippst, dann wird in den Daten der passende Eintrag gesucht, und z.B. der preis angezeigt oder zum bisherigen Gesamtpreis aufaddiert.
_________________ We are, we were and will not be.
|
|
$ebbi
Beiträge: 35
|
Verfasst: Sa 12.03.11 21:54
tut mir leid aber so ganz versteh ich das nicht
toll wär vllt ein kurzer quellcode auszug, wie ich die daten wieder in den speicher schreibe.
das grundprinzip muss ja aber nicht ändern oder? problem ist halt das alle nummern verschieden sind und da kein schema hintersteckt, wie gesagt sind ichtige barcodes.
versteh jetzt leider nicht was ich genau machen muss sry, kann nur mein bisschen 2 jahre schul delphi (da immerhin 13 punkte )
|
|
glotzer
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Sa 12.03.11 22:29
|
|
$ebbi
Beiträge: 35
|
Verfasst: So 13.03.11 19:10
Problem ist halt, wie schreib ichs rein, wie les ichs richtig aus? Wär cool wenn mir das jemand anhand des bsp edit1.text:='hallo' erklären könnte
|
|
glotzer
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: So 13.03.11 19:21
Speichern:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| var StringList: TStringList; begin StringList := TStringList.create; StringList.Add('irgend ein dummer text'); try StringList.SaveToFile('eindummerpfad\einedatei.txt'); finally StringList.Free; end; end; |
Laden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| var StringList: TStringList; begin StringList := TStringList.create; try try StringList.LoadFromFile('eindummerpfad\einedatei.txt'); except showmessage('Die datei gibt es nicht'); raise; end; if StringList.Count > 0 then begin edit1.text := StringList.Items[0]; end else begin ShowMessage('ungültige datei'); end; finally StringList.Free; end; end; |
ungetested so im editor getippt, sollte aber funktionieren.
Zuletzt bearbeitet von glotzer am Mo 14.03.11 19:40, insgesamt 1-mal bearbeitet
|
|
$ebbi
Beiträge: 35
|
Verfasst: Mo 14.03.11 15:11
vielen dank für die mühe, aber irgendwie reden wir ein wenig aneinander vorbei glaube ich (kann auch sein das ichs nicht verstehe )
ziel wäre etwas in eine datei zu schreiben, dann den string auszulesen und diesen string als befehl zu nutzen. geht das überhaupt?
Edit: prinzipiel brauch ich ja ein parser(?) der mir einen string in einen befehl umwandelt.
|
|
Gausi
Beiträge: 8535
Erhaltene Danke: 473
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Mo 14.03.11 15:48
Nein, für das, was du oben beschrieben hast, brauchst du keinen Parser. Du willst doch in etwa so eine Datei haben, oder?
Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19:
| [summary] AnzahlItems = 42
[Item1] Barcode = 4711 Name = Eimer Preis = 10,00
[Item2] Barcode = 12178 Name = Schaukelstuhl Preis = 129,99
[Item3] Barcode = 0815 Name = Teddybär Preis = 13,39
... |
Dass der Preis dann in Edit1 erscheinen soll, und der Name in Edit43, ist doch völlig egal, oder? Dein Programm muss nun so ausgelegt sein, dass deine Schwester erstens diese Daten bequem in die Datei hineinbekommt und auch bearbeiten kann und zweitens in der Kaufladensimaulation zu den Barcodes die richtigen Daten angezeigt werden.
Das ist nicht mal eben in 10 Minuten runterprogrammiert, aber einen Parser brauchst du dafür nicht!
_________________ We are, we were and will not be.
|
|
$ebbi
Beiträge: 35
|
Verfasst: Mo 14.03.11 18:25
wenn ich das jetzt alles richtig versteh wäre es am sinnvollsten die nummer in einer (erweiterbaren) txt datei zu suchen und dann einem name/preis der ebenfalls in der txt steht zuzordnen, oder? problem wäre da aber wie ich die nummer in der txt suche un dazu den richtigen preis finde.
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 14.03.11 18:57
Du kannst ja mit einer for-Schleife alle Einträge in der INI durchgehen und nachschauen wo die Nummer steht.
Oder du nimmst eine XML-Datei, dann ist das nur eine Zeile. Aber das ist für dich denke ich unnötig kompliziert. Eine INI ist veraltet und bedeutet mehr Code, ist aber einfacher. Schau dir einfach TIniFile an.
|
|
$ebbi
Beiträge: 35
|
Verfasst: Sa 19.03.11 18:54
so hab mich jetzt nochmal an der ini probiert
sieht jetzt so aus:
das reinschreiben funktioniert tadellos
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| ini := TIniFile.Create('.\neu.ini'); try ini.Writestring(nummer, 'name', name); ini.Writestring(nummer, 'Preis', preis); finally ini.Free; end; |
aber rauslesen macht probleme:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| procedure TKassenform.Button1Click(Sender: TObject); begin nummer:=edit1.Text; TIniFile.Create('.\neu.ini'); try ini.Readstring(nummer, 'name', wert1); ini.Readstring(nummer, 'preis', wert2); finally Free; end; showmessage(wert1); end; |
krieg da immer eine fehlermeldung vonwegen EAccessViolation und lesen von Adresse 00000000' aufgetreten. woran leigt das? was mach ich falsch?
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.03.11 18:57
|
|
$ebbi
Beiträge: 35
|
Verfasst: Sa 19.03.11 19:27
So jetzt klappts aber irgendwie steht in der showmessage gar nix.
Edit: Ach ja wie mach ich, dass wenn er die nummer nicht findet er keine fehlermeldung bringt sondern ne nachricht Nummer nicht gefunden?
Zuletzt bearbeitet von $ebbi am Sa 19.03.11 19:32, insgesamt 1-mal bearbeitet
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.03.11 19:32
|
|
$ebbi
Beiträge: 35
|
Verfasst: Sa 19.03.11 19:33
Moderiert von Narses: Komplett-Zitat des letzten Beitrags entfernt.
wie speichern? was müsst ich da ändern?
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.03.11 19:35
Du solltest dir vielleicht einmal die Hilfe zu dem Befehl anschauen... Delphi-Quelltext 1:
| wert1 := ini.Readstring(nummer, 'name', 'Standardwert'); |
Für diesen Beitrag haben gedankt: $ebbi
|
|
$ebbi
Beiträge: 35
|
Verfasst: Sa 19.03.11 20:19
Vielen dank hast mir sehr gegolfen
Eine Sache noch, wie mach iches, dass wenn er die nummer nicht findet er keine fehlermeldung bringt sondern ne nachricht Nummer nicht gefunden?
|
|
jaenicke
Beiträge: 19276
Erhaltene Danke: 1741
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.03.11 20:38
Eine Fehlermeldung sollte auch nicht kommen, sondern es wird einfach der Standardwert benutzt.
Aber wie wäre es, wenn du vorher abfragst, ob der Wert überhaupt existiert? Die Methode dafür müsste Reg.ValueExists heißen.
|
|
|