Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   For-In-Schleifen-Problem mit String-Array (https://www.delphipraxis.net/198068-schleifen-problem-mit-string-array.html)

DieDolly 1. Okt 2018 21:46

For-In-Schleifen-Problem mit String-Array
 
Man könnte denke ich bin mal wieder eine blinde Kuh.
Aber der Code hier unten wirft eine Exception aus, nachdem die Messagebox mit "cab" angezeigt wurde und mir ist es völlig schleierhaft warum ?!

Der Code ist auf das absolut Nötigste reduziert und da tritt der Fehler auch noch auf.
Ich möchte jeden Wer von Array Values ins Array ResArray schreiben. Natürlich ist der Code umfangreicher und gewisse Anpassungen werden vorgenommen wenn z.B. ein Eintrag einen Punkt als erstes Zeichen hat wird der entfernt und sowas. Aber das da unten ist das Miniumum-Beispiel was noch immer nicht funktioniert.

Delphi-Quellcode:
var
 ResArray, Values: TArray<string>;
 Tmp: string;
begin
 // Ein ganz normales String-Array
 Values := TArray<string>.Create('1', '2', '3');

 // String-Array Values durchiterieren
 for Tmp in Values do
  begin
   ShowMessage(Tmp);

   SetLength(ResArray, Length(ResArray) + 1);

   ResArray[Length(ResArray)] := Tmp; // Der Fehler tritt in dieser Zeile auf glaube ich
  end;
end;

Fritzew 1. Okt 2018 22:12

AW: For-In-Schleifen-Problem mit String-Array
 
Bin nicht am Rechner, aber nicht length(resarray) sondern high(resarray) bei der Zuweisung.
Length ist immer eins zu hoch.......
Sorry am smartphone

himitsu 1. Okt 2018 22:34

AW: For-In-Schleifen-Problem mit String-Array
 
Da du Probleme hast, solltest du auch mal die Index- und Bereichsprüfung in den Projektoptionen aktivieren.

Und da du nur glaubst wo der Fehler auftritt, würde es nicht schaden zu lernen wie man den Debugger benutzt.

DieDolly 1. Okt 2018 22:58

AW: For-In-Schleifen-Problem mit String-Array
 
Fritz konnte mir helfen, ohne auf mich einzudreschen. Vielen Dank.

p80286 1. Okt 2018 23:10

AW: For-In-Schleifen-Problem mit String-Array
 
"dreschen" ist ein wenig hart formuliert.
Aber der Debugger und die Projektoptionen gehören nun mal zum Basiswissen im Umgang mit dem Compiler.

Gruß
K-H

DieDolly 1. Okt 2018 23:30

AW: For-In-Schleifen-Problem mit String-Array
 
Das war nur so dahingesagt :P
Aber ich weiß was ihr meint und ja, es stimmt schon.

bernau 2. Okt 2018 09:14

AW: For-In-Schleifen-Problem mit String-Array
 
Man kann Elemente auch einfach an ein Array dranhängen, ohne SetLength zu bemühen.

Delphi-Quellcode:
var
 ResArray, Values: TArray<string>;
 Tmp: string;
begin
 // Ein ganz normales String-Array
 Values := TArray<string>.Create('1', '2', '3');

 // String-Array Values durchiterieren
 for Tmp in Values do
  begin
   ShowMessage(Tmp);
   ResArray := ResArray + [Tmp];
  end;
end;
Siehe Docwiki

Mavarik 3. Okt 2018 11:13

AW: For-In-Schleifen-Problem mit String-Array
 
Zitat:

Zitat von bernau (Beitrag 1414652)
Man kann Elemente auch einfach an ein Array dranhängen, ohne SetLength zu bemühen.

Ist aber langsamer, wenn ich mich richtig erinnere.

himitsu 3. Okt 2018 12:55

AW: For-In-Schleifen-Problem mit String-Array
 
So viel Langsamer sollte es nicht sein, als dieses ständige SetLength in jedem Durchlauf.
Also besser wäre es ja wohl, wenn man die Größe des Ziel-Arrays vor den Zuweisungen nur einmal auf Länge bringt.

Aber seit Kurzem kann man ja auch einfach sowas machen. :stupid:
Delphi-Quellcode:
for Tmp in Values do
  ShowMessage(Tmp);
ResArray := ResArray + Values;


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz