Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi In Function übergebenes dynamisches Array (https://www.delphipraxis.net/1164-function-uebergebenes-dynamisches-array.html)

RomanK 27. Okt 2002 16:55


In Function übergebenes dynamisches Array
 
Also ich will einen String mit Leerzeichen an den Leerzeichen teilen, die einzelnen Teile werden dann in ein dynamisches Array geschrieben.
Hier der Code:
Code:
function parsen ( var output: array of String; input: string; trennzeichen:char):integer;
var
i,ac:integer;
begin
ac := 1;
setlength(output,ac);  
for i:=0 to length(input) do  
 begin
 if input[i] = ' ' then
  begin                    
  inc(ac);                      
  setlength(output,ac);
 end
 else                              
  begin
  output[ac]:=output[ac]+input[i];
 end;
end;
result := ac;
end;
wenn ich jetzt
setlength(output,ac);
mache dann kommt
[Fehler] Unit1.pas(41): Inkompatible Typen
was mache ich falsch :?:
oder darf ich die Länge eines Übergebenen Arrays nicht verändern :freak: :nerd: :?:
DANKE schonmal![/b]

Chewie 27. Okt 2002 17:08

Wenn du mit Funktionen bzw. Prozeduren und dynamischen Arrays arbeitest, kannst du das Array nicht einfach so übergeben, sondern musst dir eine Art Alias-Typ erschaffen. Im Code sieht das dann so aus:

Code:
type TStringArray = Array of String;

function parsen ( var output: TStringArray; input: string; trennzeichen:char):integer;
var
i,ac:integer;
begin
ac := 1;
setlength(output,ac);
for i:=0 to length(input) do
begin
if input[i] = ' ' then
  begin
  inc(ac);
  setlength(output,ac);
end
else
  begin
  output[ac]:=output[ac]+input[i];
end;
end;
result := ac;
end;

RomanK 27. Okt 2002 17:14

DANKE.
Aber da hätte ich auch selber drauf kommen können :!: :oops: :oops:

d3g 28. Okt 2002 09:04

Hi Roman,

die Größenänderung dürfte aber ziemlich in die Hose gehen, weil dabei alle Daten aus dem Array gelöscht werden. Damit gibst du paktisch nur den Teil nach dem letzten Leerzeichen zurück.

MfG,
d3g

jbg 28. Okt 2002 09:08

Beim Aufruf von SetLength werden keine Daten gelöscht, wenn die neue Länge größer als die alte ist.

d3g 28. Okt 2002 10:24

:?: Ich dachte, ich hätte was anderes in der Delpih-Hilfe gelesen, aber um so besser :D

sakura 28. Okt 2002 13:01

Meine Hilfe schreibt da folgendes
Zitat:

Zitat von Delphi Help
For a long-string or dynamic-array variable, SetLength reallocates the string or array referenced by S to the given length. Existing characters in the string or elements in the array are preserved, but the content of newly allocated space is undefined.

Es wird auch noch auf die Ausnahme von Arrays mit speziellen Typen wie Strings, Objekten, ... hingewiesen. Diese werden, für die neuen Bereiche, auf 0 bzw. nil initialisiert.


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