Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#4

Re: Array zuweisung falsch???

  Alt 22. Okt 2004, 18:03
Delphi-Quellcode:
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;
das is fast dasselbe nur nochma vernünftig formatiert

die verbesserungen(find dich):

ich hab das create an den anfang getan
integer() durch strtoint() ersetzt

nun ein fehler (glaub ich):

Delphi-Quellcode:
for x:=1 to Length(Data) do
prdwerte[Length(prdwerte) - Length(Data)] := strtoint(Data[x]);
du willst glaube ich jede stelle von data einzeln zu prdwerte hinzufügen....
aber du schreibst jedes mal in die zelbe zelle von prdwerte....
es müsste so lauten:

Delphi-Quellcode:
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;
dann..was soll diese abfrage "until abs(x)<=10"

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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat