Autor Beitrag
$ebbi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: 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 :D. 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: 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 :D)
glotzer
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: Sa 12.03.11 22:29 
user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
[...]roblem ist halt das alle nummern verschieden sind und da kein schema hintersteckt[...]


es sind alles nummern, das ist doch schon gemeinsamkeit genug :)
$ebbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 393
Erhaltene Danke: 49

Win 7
Lazarus
BeitragVerfasst: So 13.03.11 19:21 
Speichern:
ausblenden 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');  //etwas einfügen
  try
    StringList.SaveToFile('eindummerpfad\einedatei.txt');  //das ganze speichern
  finally
    StringList.Free;
  end;
end;


Laden:
ausblenden 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');  //laden
    except
      showmessage('Die datei gibt es nicht');
      raise//damit nicht versucht wird zu laden
    end;
    if StringList.Count > 0 then  //gucken ob es in deer datei überhaupt was zum laden gibt
    begin
      edit1.text := StringList.Items[0];  //jetzt steht da "irgend ein dummer text" drinnen 
    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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: 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 :D)

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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8535
Erhaltene Danke: 473

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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?

ausblenden 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: Sa 19.03.11 18:54 
so hab mich jetzt nochmal an der ini probiert

sieht jetzt so aus:
das reinschreiben funktioniert tadellos

ausblenden 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 19.03.11 18:57 
Naja... vergleichen wir einmal...
user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden 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;
user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
nummer:=edit1.Text;
  TIniFile.Create('.\neu.ini');
   try
    ini.Readstring(nummer, 'name', wert1);
    ini.Readstring(nummer, 'preis', wert2);
   finally
    Free;
  end;
Da sollte aber auch eine Warnung kommen, dass ini nicht initialisiert ist... Warum ignorieren die Warnungen eigentlich so viele? :roll:
$ebbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 19.03.11 19:32 
Du speicherst die ausgelesenen Werte ja auch nirgends, du schmeißt den Rückgabewert von ReadString ja weg. :nixweiss:
user profile icon$ebbi hat folgendes geschrieben Zum zitierten Posting springen:
ausblenden Delphi-Quelltext
1:
2:
   try
    ini.Readstring(nummer, 'name', wert1);
$ebbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: Sa 19.03.11 19:33 
Moderiert von user profile iconNarses: Komplett-Zitat des letzten Beitrags entfernt.

wie speichern? was müsst ich da ändern?
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Sa 19.03.11 19:35 
Du solltest dir vielleicht einmal die Hilfe zu dem Befehl anschauen... :roll:
ausblenden Delphi-Quelltext
1:
wert1 := ini.Readstring(nummer, 'name''Standardwert');					

Für diesen Beitrag haben gedankt: $ebbi
$ebbi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19276
Erhaltene Danke: 1741

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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.