![]() |
Array zuweisung falsch???
Ist die array zuweiseung richtig?
Ich will die werte die mir die variable data gibt in ein fortlaufendes array geben, dabei die letzten zwei aktuellen werte miteinander vergleichen und wenn der unterschied <=10 ist soll die schleife beendet werden, aber irgendwie funktioniert das nicht, wieso? Hab keine Ahnung mehr :-(
Delphi-Quellcode:
///// Liest eine gewählte Datei ein und sendet die Daten per com 1 an das Endgerät /////
procedure TForm1.DateieinlesenClick(Sender: TObject); var Liste : TStringList; i : Integer; data : string; x : integer; F: TextFile; filename : String; prdwerte : array of integer; differenzwert : integer; begin if OpenDialog1.Execute then { Dialog zum Dateiöffnen anzeigen } begin filename := OpenDialog1.FileName; try Liste := TStringList.Create; Liste.LoadFromFile(filename); for i := 0 to Liste.Count-1 do begin // ShowMessage(Liste[i]); apdcomport1.putstring(Liste[i]); apdcomport1.putstring(#13); repeat apdcomport1.putstring('prd'); apdcomport1.putstring(#13); // repeat //until data = '-->'; Setlength(prdwerte,length(prdwerte)+length(data)); for x:=1 to Length(Data) do prdwerte[Length(prdwerte) - Length(Data)] := integer(Data[x]); //differenzwert := prdwerte[high(prdwerte)-1]-prdwerte[high(prdwerte)]; until abs(x)<=10; end finally Liste.Free; end; end; end; ///// Stellt den Antwortbefehl des Endgerätes auf einem Memo da ///// procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var Data: String; I: Integer; begin data := ''; for I:= 0 to Count-1 do Data := data+ApdComPort1.GetChar; Memo1.text:= data; end; |
Re: Array zuweisung falsch???
Zitat:
Ich sehe in dem Code nur noch das absolute Chaos. Zusammengeklatscht aus den ganze Antworten zu deinen Beiträgen. Zum Programmieren braucht man eine gewisse Eigeninitiative und muss auch mal selber die grauen Zellen anstrengen. :angel: |
Re: Array zuweisung falsch???
was funktioniert nicht?
|
Re: Array zuweisung falsch???
Delphi-Quellcode:
das is fast dasselbe nur nochma vernünftig formatiert
procedure TForm1.DateieinlesenClick(Sender: TObject);
var Liste : TStringList; i, x, differenzwert : Integer; data, filename : string; F: TextFile; prdwerte : array of integer; begin //Init Liste := TStringList.Create; //Main Proc 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 apdcomport1.putstring(Liste[i]); apdcomport1.putstring(#13); repeat apdcomport1.putstring('prd'); apdcomport1.putstring(#13); //repeat //until data = '-->'; Setlength(prdwerte,length(prdwerte)+length(data)); for x:=1 to Length(Data) do prdwerte[Length(prdwerte) - Length(Data)] := strtoint(Data[x]); //differenzwert := prdwerte[high(prdwerte)-1]-prdwerte[high(prdwerte)]; until abs(x)<=10; end finally end; end; Liste.Free; end; procedure TForm1.ApdComPort1TriggerAvail(CP: TObject; Count: Word); var Data: String; I: Integer; begin data := ''; for I:= 0 to Count-1 do Data :=data + ApdComPort1.GetChar; Memo1.text:= data; end; die verbesserungen(find dich): ich hab das create an den anfang getan integer() durch strtoint() ersetzt nun ein fehler (glaub ich):
Delphi-Quellcode:
du willst glaube ich jede stelle von data einzeln zu prdwerte hinzufügen....
for x:=1 to Length(Data) do
prdwerte[Length(prdwerte) - Length(Data)] := strtoint(Data[x]); aber du schreibst jedes mal in die zelbe zelle von prdwerte.... es müsste so lauten:
Delphi-Quellcode:
dann..was soll diese abfrage "until abs(x)<=10"
data_length:=length(data);//länge nehmen
for x:=1 to data_length do begin prdwerte[Length(prdwerte) - Length(Data)] := strtoint(Data[x]); delete(data,0,1); //durch das löschen verringert sich die länge von data und der index beim nächsten durchlauf ist erhöht... end; abs is hier für die tonne, weil x nie negtiv sein kann, da davor diese schleife ist: for x:=1 to data_length do und wenn data_length negativ wäre (kannes aber auch nicht sein) dann würde die schleife nicht ausgeführt, und x wäre 0 oder 1 (bin mir nicht sicher) aber auf jeden fall nicht <0 so, und x<10, da kannst du auch sagen data_length, das is verständlicher aber da haste recht, das geht nur mit meiner version ;) das is so das was mir spontan aufgefallen ist.... hoffe es hilft dir erst mal... ADD: die wegkommentierten sachen habbich erstmal ignoriert |
Re: Array zuweisung falsch???
Ist der Inhalt einer Schleifenvariable nach der Schleife nicht potentiell undefiniert? :gruebel:
|
Re: Array zuweisung falsch???
neee...das sollte nicht sein....aber wenn man hatt for i:=1 to -1...
ist dann danach i=dem wert von vorher (wahrscheinlich 0) oder =1 (also dem startwert)? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz