Einzelnen Beitrag anzeigen

Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#6

Re: Probleme beim Arraygröße ändern

  Alt 9. Jan 2007, 17:13
Zitat von sirius:
Wenn man ein "array of String" erstellt, sollte man sofort an eine TStringlist denken.

Hier mal ein Beispiel zum nachdenken:
Delphi-Quellcode:
procedure teilen(s:string;const a:TStringlist;const t:char=':');
begin
  a.Clear; //stringlist löschen
  a.Delimiter:=t; //Delimiter setzen
  a.DelimitedText:=s; //s wird in die Stringlist anhand des Delimiters einsortiert
end;
Hi,
an sich hat sirius natürlich recht! Ein Array immer dyn. in der Größe anzupassen ist schlechter Stil (besonders beim vergrößern um 1!), hier ist der Overhead für dieses Vergrößern (neuen Speicher allozieren, altes Array reinkopieren und alten Speicher frei geben) für ein Element doch recht hoch. Insbesondere, da das Allozieren, Kopieren und Freigeben nahezu konst. viel Zeit (bei beliebiger Anzahl von Elementen) benötigt. Da ist es besser einfach gleich eine Menge mehr Elemente zu allozieren und zu verwalten, wieviel man gerade vom gesamten Array verwendet (und genau das macht die TStringList).
Die sollte jedenfalls immer erste Wahl bei dyn. Anzahl von Strings sein, genau dafür ist die da! Mittels add kannst du ein neues Element hinzufügen, die passt die Größe (bei Bedarf) selbst an.

Ein praktischer Nebeneffekt, du hast die Eigenschaften Delimiter und DelimitedText, du kannst also anhand eines Trennzeichen einen String zerlegen. Einziges Problem, die Implementierung ist etwas fehlerhaft. Dummerweise wird hier jedes Leerzeichen immer als Delimitter betrachtet, unabhängig vom eingestellten Trennzeichen. Deswegen rate ich dir dazu, zwar die TStringList oder eben einen anderen TStrings-Nachkommen zu verwenden, aber das Trennen solltest du mit einer anderen Funktion (glaube du findest hier die Hier im Forum suchenexplode) vornehmen.

Gruß Der Unwissende

[ADD]
Ok, ich verweise lieber auf die hier: Split, da wird dann auch eine TStringList zurückgegeben[/ADD]
  Mit Zitat antworten Zitat