Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - aktuelle länge eines dyn. arrays feststellen?


liquid air - Mi 24.10.07 17:17
Titel: aktuelle länge eines dyn. arrays feststellen?
Hi alle,

tja, Frage steht oben ^^ wenn ich ein dynamisches Array hab, wie kann ich dann dessen Länge feststellen? ...Also, falls ich mich dumm ausdrück: ich hab ein dyn. Array of integer. Da will ich n paar integerzahlen reinschreiben. dafür müsst ich ja aber ungefähr so machen:

Delphi-Quelltext
1:
myarray[arraylaenge+1]:=myint;                    


und dazu müsste ich halt die momentane arraylaenge irgendwie bekommen...hab schon versucht über ne hilfsvariable und dann hilfsvariable:=length(myarray) ...hat aber auch nich geklappt, das is also wohl was anderes ^^'


Wenn mir Jmd helfen kann, ich würd mich bedanken ^^


Gruss Matthias

Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt


mkinzler - Mi 24.10.07 17:21

Length() ist schon richtig, aber so wie du es einfügen willst geht es natürlich nicht! da der Index von 0 bis Länge - 1 geht!


liquid air - Mi 24.10.07 17:25

hmm, ich glaub ich versteh was du meinst...aber wie kann ichs dann machen?
...also, ich glaub ich schick dir einfahc ma den betreffenden teilcode, damit du weisst was ich mein...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
while s[i+1]<>'' do begin 
    inc(i);
    opn:=length(operanden);
    case s[i] of
      '1'..'9': operanden[opn+1]:=strtoint(s[i]);
    end;
  end;


operanden is das array of integer...s is mein string

die Funktion soll jetzt den String durchgehn und alle Zahlen, die darin vorkommen, in dieses Array operanden schreiben..


mkinzler - Mi 24.10.07 17:29

Nochmal der array geht von index 0 bis Länge - 1 als o bei länge 4 0 bis 3. Du versuchst aber auf Index 5 zuzugreifen und der existiert nicht!!!


liquid air - Mi 24.10.07 17:35

ja okay, das versteh ich ^^
aber es is ja ein dynamisches array, also nicht in seiner länge festgelegt. dann müsst ich doch das array um einen index "verlängern" können, und dann auf das neu entstandene element zugreifen können, oder?

wenn ich also hätte länge=4 mit array[0..3]=(3, 5, 1, 6), dass ich dann die länge:=5 setze und dann als array[4] meine aktuelle integer-zahl einsetzen kann

muss doch gehn oder? ^^


mkinzler - Mi 24.10.07 17:38

Nicht von alleine. Du musst ihn mit setLength() vergrößern.


alias5000 - Mi 24.10.07 17:39

Die Länge eines Array änderst du mit SetLength ;)

Gruß
alias5000


liquid air - Mi 24.10.07 17:45

jep weiss ich, ich dacht nur es geht simpler, weil so n paar zeilen code dazukommen, die auf den ersten blick unnötig kompliziert aussehn...habs aber jetzt auch auf die art hinbekommen ^^ sorry, bin manchmal bissl verwirrt mit den ganzen indizees...dass veim array das erste element index 0 hat, un bei z.b. memo-feld das erste den index 1 hat...is verwirrend fürn anfänger ^^ ich danke euch, und wens interessiert (ma kann ja nie wissen >.<) hier is der quellcode dann...



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
while s[i+1]<>'' do begin 
    inc(i);
    opn:=length(operanden);
    case s[i] of
      '1'..'9'begin
         setlength(operanden, opn+1);
         operanden[opn]:=strtoint(s[i]);
       end;
    end;
  end;



Danke, Gruß Matthias


mexx2k - Fr 26.10.07 09:17


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type Spielflaeche = array of TEinzelfeld;

begin 

...
setlength(Spielflaeche,iX);
...
end;


^^
'(' erwartet, aber ',' gefunden

^^
warum?


SvenAbeln - Fr 26.10.07 12:18


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
 type TSpielflaeche = array of TEinzelfeld;

 var Spielflaeche: TSpielflaeche; 

 begin 
 ...
 setlength(Spielflaeche,iX);
 ...
 end;