Autor Beitrag
skaven
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 41



BeitragVerfasst: Fr 22.10.04 15:56 
Hallo zusammen. wäre nett wenn ihr mal mein Programm sichten könntet, irgendwie funktioniert das mit dem array nicht.

ich will die fortlaufenden werte von data in ein array speichern und dann immer die letzten zwei aktuellen mit einander vergleichen und wenn die differenz <=10 ist, soll die schleife beendet werden. hat jemand ne idee warum das nicht geht?

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
///// 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


Moderiert von user profile iconChristian S.: Delphi-Tag repariert
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Fr 22.10.04 16:03 
Hallo!

Es wäre schön, wenn Du sagst was nicht funktioniert! Kommt eine Fehlermeldung? Werden falsche Werte benutzt?

Auf Anhieb fällt mir nur die Schleife in den Zeilen 28 und 29 auf, die einen etwas komischen Eindruck macht.

MfG
Christian

//edit: Und in den Zeilen 31 und 32 wird immer wieder auf das selbe Arrayelement zugegriffen.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
Basti
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 345

Windows Vista
D2005 Pers, D7 Pers
BeitragVerfasst: Fr 22.10.04 18:00 
ausblenden Delphi-Quelltext
1:
prdwerte[Length(prdwerte) - Length(Data)] := integer(Data[x]);					

Ich könnte mir vorstellen, dass genau das nicht funktioniert.
Hast du sichergestellt, dass Length(prdwerte) - Length(Data) größer gleich 0 ist?
Ansonsten müsstest du es wirklich genauer beschreiben...