Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi setlength klappt nicht (https://www.delphipraxis.net/89001-setlength-klappt-nicht.html)

kaffesuechtig 24. Mär 2007 14:04


setlength klappt nicht
 
Hallo,

ich habe folgendes Problem:

Delphi-Quellcode:
begin

cache:=Memo1.text;
laenge:=length(cache);

setlength(satz, laenge);
   i:=0;
while(i<=laenge) do

  begin
  setlength(satz, laenge);
   satz[i]:=cache[i];
   inc(i);
   end;
end
satz ist als satz:array of string definiert.


Warum klappt das nicht? Wenn ich kein dynamisches Array verwende klappt alles.


gruß

Matze 24. Mär 2007 14:10

Re: setlength klappt nicht
 
Hi, Kaffeesüchtiger, herzlich willkommen ;)

Delphi-Quellcode:
while(i <= laenge) do
begin
  setlength(satz, laenge);
Da machst du in der Schleife immer das gleiche, das reicht einmal vor der Schleife, wie du es zusätzlich auch hast.

Und kann es sein, laenge sollen die Anzahl der Zeilen des Memos sein? Das ginge so:

Delphi-Quellcode:
laenge := Memo1.Lines.Count;

kaffesuechtig 24. Mär 2007 14:13

Re: setlength klappt nicht
 
nun gut aber der Fehler kommt trotzdem und es liegt 100% am setlength. Kann man überhaupt eine wechselnde integer Variable als Parameter für setlength nehmen? Der Benutzer tippt nämlich ein Text ins Memofeld ein und das soll als string in cache eingelesen werden. und das array soll halt dann die größe des satzes annehmen.

MrKnogge 24. Mär 2007 14:14

Re: setlength klappt nicht
 
Statt eines array of string solltest du lieber eine stringlist verwenden.

Gruß

Matze 24. Mär 2007 14:23

Re: setlength klappt nicht
 
Zitat:

Zitat von kaffesuechtig
Kann man überhaupt eine wechselnde integer Variable als Parameter für setlength nehmen?

Natürlich, sonst kann man auf dynamische Arrays ja gleich verzichten. ;)

Überprüfe mal den Wert von laenge.

Aber je nach Vorhanden ist es evtl. wirklich geschickter, eine TStringList zu verwenden. Die kannst du in einer Schleife einfach durchlaufen und den Inhalt auch in dem Memo ausgeben. Was kommt denn überhaupt für ein Fehler?

kaffesuechtig 24. Mär 2007 14:30

Re: setlength klappt nicht
 
vom compiler kommt kein fehler aber wenn man die procedure ausführt !!
00403EEC irgnedwas damit

Christian S. 24. Mär 2007 14:30

Re: setlength klappt nicht
 
Hallo!

Wenn Du Deine Schleife soweit laufen lässt, dass i = laenge ist, dann greifst Du auf ein Element im Array zu, welches gar nicht vorhanden ist. Die Indizierung eines dynamischen Arrays beginnt bei 0 und endet bei Length()-1. Ändere also die Bedingdung der while-Schleife mal auf i<laenge.

Grüße
Christian

Muetze1 25. Mär 2007 12:52

Re: setlength klappt nicht
 
... und wenn "cache" immernoch ein String ist, dann greifst du dort auch auf einen ungültigen Index zu, da Strings von 1 bis Lenght() gehen.


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