AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dynamisches Array als Parameter einer Prozedur
Thema durchsuchen
Ansicht
Themen-Optionen

Dynamisches Array als Parameter einer Prozedur

Ein Thema von changlee · begonnen am 29. Dez 2004 · letzter Beitrag vom 29. Dez 2004
Antwort Antwort
changlee
(Gast)

n/a Beiträge
 
#1

Dynamisches Array als Parameter einer Prozedur

  Alt 29. Dez 2004, 09:31
Hallo,
ich probiere jetzt schon längere Zeit herum, komme aber zu keiner schönen Lösung.
Ich möchte eine Funktion schreiben, die ein Array zurück gibt, dessen Länge variabel sein soll.
Diese Prozedur soll wie folgt aufgerufen werden:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var liste : array of string;
begin
  explode('-', 'Mein Name - ist - Stefan', liste); {Länge des dyn. Array soll in explode gesetzt werden}
end;

In der procedure explode würde ich dann gern so verfahren:

Delphi-Quellcode:
procedure TForm1.explode(separator, str: String; var liste: array of string); {hier ist Teil 1 des Problems}
var n:integer;
begin
  n:=0;
  repeat
    if ... then begin
      inc(n)
      setlength(liste, n); {hier ist Teil 2 des Problems}
      liste[n] := ...
    end;
end;
Leider lässt die herkömmliche Deklaration eines Arrays als Parameter keine Unterscheidung zwischen dynamischem und statischem Array zu.
Wie kann ich dieses Problem umgehen/lösen?
Wäre ein dynamisches Array evtl. auch als Rückgabewert einer function realisierbar? Diese Lösung wäre ja noch ein wenig eleganter. Ich würde allerdings gern vermeiden, einen eigenen Typ zu deklarieren, wie es unter http://www.delphipraxis.net/internal...amisches+array vorgeschlagen wird.

Wäre wirklich nett, wenn mir jemand helfen würde.
mfg
changlee
  Mit Zitat antworten Zitat
paresy

Registriert seit: 24. Aug 2004
Ort: Lübeck
105 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Dynamisches Array als Parameter einer Prozedur

  Alt 29. Dez 2004, 09:44
hier nen beitrag mit der gesuchten funktion:
http://www.delphipraxis.net/internal...ect.php?t=3816

und um deine frage zu beantworten.... du musst dein "array of string" einfach in als typ definieren
quasi:

type
TDynStrArray=Array of String;

und dann immer 'TDynStrArray' statt 'Array of String' benutzen und schon gehts

vllt weiß ja noch jemand wieso das so sein muss... und nicht auch anders geht...

grüße, paresy
  Mit Zitat antworten Zitat
changlee
(Gast)

n/a Beiträge
 
#3

Re: Dynamisches Array als Parameter einer Prozedur

  Alt 29. Dez 2004, 10:01
Hallo Paresy,
danke für deine Antwort.

Ich werde mich wohl damit abfinden müssen einen eigenen Typ zu deklarieren.
Ich hab das auch gerade mal nach deinem Vorschlag umgesetzt. Funktioniert alles.

Danke auch für den Link, wo der Quellcode für die gewünscht Funktion/Prozedur explode steht.
Ich hatte das seltsamerweise gar nicht gefunden.

Naja, jetzt habe ich explode sowieso schon selbst fertig geschrieben

mfg
changlee
  Mit Zitat antworten Zitat
Benutzerbild von MaBuSE
MaBuSE

Registriert seit: 23. Sep 2002
Ort: Frankfurt am Main (in der Nähe)
1.840 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

Re: Dynamisches Array als Parameter einer Prozedur

  Alt 29. Dez 2004, 16:15
Zitat von paresy:
vllt weiß ja noch jemand wieso das so sein muss... und nicht auch anders geht...
Das liegt an der Typidentität.

In der Delphi 7 Onlinehilfe steht
Typidentität

Für die Typidentität gilt folgende Regel: Wenn ein Typbezeichner mit einem anderen Typbezeichner deklariert wird (ohne Qualifizierer), bezeichnen beide denselben Typ. Betrachten Sie die folgenden Typdeklarationen:

Delphi-Quellcode:
type
  T1 = Integer;
  T2 = T1;
  T3 = Integer;
  T4 = T2;
Hieraus folgt, dass T1, T2, T3, T4 und Integer identische Typen sind. Um unterschiedliche Typen zu definieren, wiederholen Sie das Wort type in der Deklaration. Ein Beispiel:

type TMyInteger = type Integer; Diese Anweisung erzeugt z. B. einen neuen Typ namens TMyInteger, der nicht mit Integer identisch ist.

Sprachkonstrukte, die als Typnamen fungieren, erzeugen bei jedem Auftreten einen anderen Typ. Die folgenden Typdeklarationen

Delphi-Quellcode:
type
  TS1 = set of Char;
  TS2 = set of Char;
definieren beispielsweise die beiden unterschiedlichen Typen TS1 und TS2. Entsprechend werden mit den Variablendeklarationen

Delphi-Quellcode:
var
  S1: string[10];
  S2: string[10];
zwei Variablen unterschiedlichen Typs erzeugt. Um Variablen mit identischem Typ zu deklarieren, gehen Sie folgendermaßen vor:

var S1, S2: string[10]; or

Delphi-Quellcode:
type CString = string[10];
var
  S1: MyString;
  S2: MyString;
(°¿°) MaBuSE - proud to be a DP member
(°¿°) MaBuSE - proud to be a "Rüsselmops" ;-)
  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 23:01 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