AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi In Function übergebenes dynamisches Array
Thema durchsuchen
Ansicht
Themen-Optionen

In Function übergebenes dynamisches Array

Ein Thema von RomanK · begonnen am 27. Okt 2002 · letzter Beitrag vom 28. Okt 2002
Antwort Antwort
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#1

In Function übergebenes dynamisches Array

  Alt 27. Okt 2002, 16:55
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
DANKE schonmal![/b]
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#2
  Alt 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;
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von RomanK
RomanK

Registriert seit: 7. Jun 2002
Ort: Kirchheim unter Teck
1.036 Beiträge
 
Delphi 7 Personal
 
#3
  Alt 27. Okt 2002, 17:14
DANKE.
Aber da hätte ich auch selber drauf kommen können
Roman Keller
Krieg ist Gottes Art den Amerikanern Geographie beizubringen!
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#4
  Alt 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
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5
  Alt 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.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#6
  Alt 28. Okt 2002, 10:24
Ich dachte, ich hätte was anderes in der Delpih-Hilfe gelesen, aber um so besser
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#7
  Alt 28. Okt 2002, 13:01
Meine Hilfe schreibt da folgendes
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.
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
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