![]() |
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? |
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.
|
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. |
Re: Variablen fortlaufend erweitern und vergleichen
Array deklarieren:
Delphi-Quellcode:
Array um eins vergrößeren
var
Test: Array of Integer;
Delphi-Quellcode:
Mit Length bekommst du die aktuelle Anzahl der Elemente im Array.
Setlength(Test,length(Test)+1);
Auf letztes Element zugreifen
Delphi-Quellcode:
Vorletztes Element entsprechend
Test[high(Test)]:=a
Delphi-Quellcode:
Test[high(Test)-1]:=a
|
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? |
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: |
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:
Wichtig ist nur, dass dann mindestens zwei Einträge im Array drin sind. Prüfen kannst du das mit length(Test)>=2.
if Test[high(Test)-1]<>Test[high(Test)] then
. . |
Re: Variablen fortlaufend erweitern und vergleichen
Ach so, alles klar, probier es sofort. Erstmal vielen Dank udn ein schönes WE.
|
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; |
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]); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 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