Hallo zusammen, erst mal einen wunderschönen Dienstag, haben es ja bald geschafft, das We ist zum greifen nah
Think positiv.
Folgendes Problem, habe ien Programm geschrieben das einen
Com Port ausliest und mir einen Zahlenwert aus einem String ausschneidet.
Es werden mehrere Zahlenwerte ausgelesen und ich würde diese gerne in variablen speichern, weil ich die letzten beiden auf >=10 vergleichen möchte um eine schleife zu beenden.
Habe gedacht das ich diese mit einem array versuche, aber leider funktioniert das nicht so. Irgendwo ist in dem array eine falsche Zuweisung.
Vielleicht habe ich das acuch falscg generiert, keine Ahnung, HILFE
Delphi-Quellcode:
procedure TForm1.DateieinlesenClick(Sender: TObject);
var
Liste : TStringList;
i,x, data_length, firstnumber, lastnumber, result, value, differenzwert : Integer;
hilftext, data, filename, last_value : String;
prdwerte : array of integer;
begin
liste :=tstringlist.create;
if OpenDialog1.Execute then { Dialog zum Dateiöffnen anzeigen }
begin
filename := OpenDialog1.FileName;
try
Liste.LoadFromFile(filename);
for i := 0 to Liste.Count-1 do
begin
{comport komplett leerlesen}
while (ApdComPort1.CharReady) do {ComPort wird komplett ausgelesen}
begin
Data := data+ApdComPort1.GetChar; {ComPort wird ausgelesen}
end;
data := '';
apdcomport1.putstring(Liste[i]); {Übermittelt Daten aus Com1}
apdcomport1.putstring(#13);
{ Bestätigung des ersten Befehles loeschen }
while (pos('>',data) = 0) do
while (ApdComPort1.CharReady) do {ComPort wird komplett ausgelesen}
begin
Data := data+ApdComPort1.GetChar; {ComPort wird ausgelesen}
end;
data := '';
repeat
apdcomport1.putstring('prd');
apdcomport1.putstring(#13);
{ Zeichen einlesen bis Endzeichen ">" }
while (pos('>',data) = 0) do
while (ApdComPort1.CharReady) do {ComPort wird komplett ausgelesen}
begin
Data := data+ApdComPort1.GetChar; {ComPort wird ausgelesen}
end;
begin
firstnumber := 0;
lastnumber := 0;
hilftext := '';
{Ermittlung der Zahlenposition}
while (firstnumber < Length(data)) and not (data[firstnumber] in ['1'..'9','0']) do
Inc(firstnumber);
lastnumber := firstnumber;
{auslesen und speichern der Zahlen}
while (lastnumber < Length(data)) and (data[lastnumber] in ['1'..'9','0']) do
begin
hilftext := hilftext + data[lastnumber];
Inc(lastnumber);
end;
value:=StrToInt(hilftext);
memo1.text := memo1.text + IntToStr(value);
// {speichern der Zahlenwerte in einem Array}
Setlength(prdwerte,length(prdwerte)+length(hilftext));
data_length:=length(hilftext);
for x:=1 to data_length do
begin
prdwerte[Length(prdwerte) - Length(hilftext)+ x] := strtoint(hilftext[x]);
end;
end;
until differenzwert<=10;
end;
finally
Liste.Free;
end;
end;
end;
Nochmal das ganze Zusammengefaßt:
"Ich frage einen
com port ab und speicher diesen wert in der Variablen value ab.
Jetzt soll die schleife nochmals durchlaufen und der
com port wird nochmal abgefragt, der neue wert soll z.b. in der variablen value_new abgespeichert werden.
Jetzt habe ich zwei Variablen, diese beiden würde ich gerne auf <=10 vergleichen, falls es der fall ist, soll die repaet until schleife beendet werden, falls nicht, soll ein weiterer wert ausgelesen werden, diesem eine neue variable zugewiesen werden und diese neue mit der letzten, also value_new auf <=10 verglichen werden, und immer weiter so bis die Bedingung erfüllt ist und die Schleife somit beendet werden kann. "
Wäre echt nett wenn jemand ne Idee hat. Vielleicht habe ich auch den total falschen Programmier Ansatz gewählt