Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Variablen fortlaufend erweitern und vergleichen (https://www.delphipraxis.net/32383-variablen-fortlaufend-erweitern-und-vergleichen.html)

skaven 22. Okt 2004 12:34


Variablen fortlaufend erweitern und vergleichen
 
Hi,

ich will ein Programm schreiben das fortlaufend eingehende daten in variablen abspeichert.

dabei weiß ich nicht genau wieviele werte ich bekomme.
also sollte es so sein das das programm soviele variablennamen anlegt, wie es werte bekommt und außerdem soll es immer die letzten zwei werte miteinander vergleichen.

diese möchte ich dazu benutzen wenn die differenz der letzten beiden werte nicht größer 10 ist um einen repeat zu beenden.

Benutzt man dafür ein array? oder wie geht das?

Kompliziert kompliziert, aber doch sicherlich machbar, oder?

jim_raynor 22. Okt 2004 12:36

Re: Variablen fortlaufend erweitern und vergleichen
 
Array ist die einfachste und auch so ziemlich die einzigst Sinnvolle Lösung dafür. Nimm ein dynamisches Array, dass kann einfach per SetLength vergrößert werden, so wie du es gerade brauchst.

skaven 22. Okt 2004 12:38

Re: Variablen fortlaufend erweitern und vergleichen
 
Mit dem Array ist schon mal supi, danke, aber da ich neu bin, weiß ich nicht genau wie ich das anwenden soll udn wie ich mein programm dazu bringe, den wert den ich bekomme in ein array zu schreiben, bzw. wie ich gezielt auf die letzten beiden werte zugreifen kann um diese zu vergleichen.

Hoffe Ihr helft mir weiter.

jim_raynor 22. Okt 2004 12:40

Re: Variablen fortlaufend erweitern und vergleichen
 
Array deklarieren:

Delphi-Quellcode:
var
  Test: Array of Integer;
Array um eins vergrößeren

Delphi-Quellcode:
Setlength(Test,length(Test)+1);
Mit Length bekommst du die aktuelle Anzahl der Elemente im Array.

Auf letztes Element zugreifen

Delphi-Quellcode:
Test[high(Test)]:=a
Vorletztes Element entsprechend

Delphi-Quellcode:
Test[high(Test)-1]:=a

skaven 22. Okt 2004 12:42

Re: Variablen fortlaufend erweitern und vergleichen
 
Hab ich das richtig verstanden das mein letztes und vorletztes element in "a" gespeichert sind?
Kann doch nicht oder?

jfheins 22. Okt 2004 12:44

Re: Variablen fortlaufend erweitern und vergleichen
 
In dem obigen Fall hätten sowohl das letzte als auch das vorletzte Element des Arrays den Wert von a

:dancer2: :dancer: :party: 300. Beitrag :party: :dancer: :dancer2:

jim_raynor 22. Okt 2004 12:44

Re: Variablen fortlaufend erweitern und vergleichen
 
War nur ein Beispiel für eine Zuweisung. Das letzte Element ist Test[high(Test)]. Was du jetzt damit machst ist deine Sache.

Zum Beispiel das letzte mit dem vorletzten vergleichen:

Delphi-Quellcode:
if Test[high(Test)-1]<>Test[high(Test)] then
.
.
Wichtig ist nur, dass dann mindestens zwei Einträge im Array drin sind. Prüfen kannst du das mit length(Test)>=2.

skaven 22. Okt 2004 12:45

Re: Variablen fortlaufend erweitern und vergleichen
 
Ach so, alles klar, probier es sofort. Erstmal vielen Dank udn ein schönes WE.

skaven 22. Okt 2004 14:36

Re: Variablen fortlaufend erweitern und vergleichen
 
Hab doch noch eine frage, wie schreibe ich denn die werte "data" in mein array?


Delphi-Quellcode:
procedure TForm1.DateieinlesenClick(Sender: TObject);
var
   Liste : TStringList;
   i : Integer;
   data : string;
   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
        Setlength(prdwerte,length(prdwerte)+1);
        differenzwert := prdwerte[high(prdwerte)-1]-prdwerte[high(prdwerte)];
       until abs(differenzwert)<=10;
    end
   finally
  Liste.Free;
  end;
  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;

SleepyMaster 22. Okt 2004 14:54

Re: Variablen fortlaufend erweitern und vergleichen
 
ungefähr so:

Delphi-Quellcode:
SetLength(prdwerte, Length(prdwerte) + Length(Data));

for i:=1 to Length(Data) do
  prdwerte[Length(prdwerte) - Length(Data)) + i] := integer(Data[i]);

skaven 22. Okt 2004 15:00

Re: Variablen fortlaufend erweitern und vergleichen
 
und dann vergleiche ich dann schreibe ich um eine schleife zu beenden until i<=100

SleepyMaster 22. Okt 2004 15:02

Re: Variablen fortlaufend erweitern und vergleichen
 
:gruebel:

skaven 22. Okt 2004 15:05

Re: Variablen fortlaufend erweitern und vergleichen
 
Das funktioniert leider nicht, hier nochmal der Quellcode:

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) + i] := integer(Data[i]);
        differenzwert := prdwerte[high(prdwerte)-1]-prdwerte[high(prdwerte)];
       until abs(differenzwert)<=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;

SleepyMaster 22. Okt 2004 15:08

Re: Variablen fortlaufend erweitern und vergleichen
 
Und wo gehört das kopieren hin / Was GENAU funktioniert nicht?

skaven 22. Okt 2004 15:12

Re: Variablen fortlaufend erweitern und vergleichen
 
ich will am ende zwei eingelesene werte, die letzten zwei des arrays vergleichen und die schleife durchlaufen lassen, bis die differnez <= 10 ist, das funktioniert nicht


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:21 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