Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Array an Function / Procedure übergeben (https://www.delphipraxis.net/76606-array-function-procedure-uebergeben.html)

moggaz 6. Sep 2006 23:57


Array an Function / Procedure übergeben
 
Hallo,

hab ne weile hier umhergeschnüffelt aber nicht so die antwort gefunden.

Anmerkung: Blutiger Anfänger ;)
Ich habe folgendes Problem:

Ich habe 3 Arrays und eine funktion die in einem 'von mir zur laufzeit festgelegtem array' etwas suchen soll.....
Aber wie übergebe ich den Array Name an die funktion ?

Ich habe also 3 arrays

Delphi-Quellcode:
Var
 test1: array[1..10] of string;
 test2: array[1..10] of string;
 test3: array[1..10] of string;
Und eine funktion
Delphi-Quellcode:
function such(s:string ; XXXXX???): string;
begin

result:=s;
end;
Ausführen möchte ich das dann etwa so .....

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin

such('muh',test1      {oder test2 oder test3, soll variable bleiben}   );

end;

//quasi soll nur noch angegeben werden was, in welchem array gesucht werden soll .....


Hab etwas mit "type" gefunden aber das ging auch nciht so richtig ..... er wollte dann bei der übergabe noch etwas haben (ka was)





Kann mir da wer helfen ¿

Matze 7. Sep 2006 00:00

Re: Array an Function übergeben
 
Hallo und herzlich willkommen!

Das musst du über Typen, wie du richtig herausgefunden hast, lösen:

Delphi-Quellcode:
type
  TMyArray = array[1..10] of string;

var
  test1, test2, test3: TMyArray;
die Funktion sieht dann so aus

Delphi-Quellcode:
function such(s: string; Foo: TMyArray): string;

moggaz 7. Sep 2006 00:10

Re: Array an Function übergeben
 
Damn,

um diese Uhrzeit nach 3 min die Lösung .... ich werd nciht mehr ...
Und das beste ... es fun(c)tioniert.....

Nun kann ich einfach mit

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin

 such('muh', test1);
 such('bla', test2);
end;
... arbeiten.


Dankeschön

Ist dies dann

Delphi-Quellcode:
type
  tmyarray = array of string;
das selbe Prinzip ? Kann ja sein das das mal dynamisch sein muss... *G*

Hab ich schon Dankeschön gesagt ¿?
PS: www.delphipraxis.net wurde sofort in die Favoriten aufgenommen

Matze 7. Sep 2006 00:23

Re: Array an Function übergeben
 
Hi, bittesehr.

Zitat:

Zitat von moggaz
Ist dies dann

Delphi-Quellcode:
type
  tmyarray = array of string;
das selbe Prinzip ? Kann ja sein das das mal dynamisch sein muss... *G*

Ja das geht analog:

Delphi-Quellcode:
type
  TMyArray = array of string;

var
  test1, test2, test3: TMyArray;
Beim Füllen des Arrays Delphi-Referenz durchsuchenSetLength nicht vergessen (Beispiel):

Delphi-Quellcode:
// Hier eine Länge von 2
SetLength(test1, 2);

test1[0] := 'Hallo';
test1[1] := 'Tschüss';
Eine mögliche Funktion wäre dann diese:

Delphi-Quellcode:
function Output(MyArray: TMyArray): string;
var
  i: Integer;
  MyResult: string;
begin
  MyResult := '';

  // Alle Einträge durchgehen
  for i := Low(MyArray) to High(MyArray) do
  begin
    MyResult := MyResult + ' ' + MyArray[i];
  end;

  Result := MyResult;

moggaz 7. Sep 2006 00:29

Re: Array an Function übergeben
 
Hmm entweder ist es spät oder ich habe (wie ich eher vermute) nen gedankenfehler drin.
Hier mal in abgewandelter form als procedure und ins array schreibend.....


Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Memo1: TMemo;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  tmyarray = array[1..10] of string;

var
  Form1: TForm1;
  test1,test2,test3: tmyarray;

implementation

{$R *.dfm}

procedure schreib(s:string ; foo:tmyarray);        // <- hier übergebe ich test1 oder ?
var x:integer;
begin
  x:=1;
  Repeat
   foo[x]:=s;         // <<----- foo ist doch quasi mein array als variable oder ? <- sollte er doch hier in test1 schreiben nicht in foo ¿
   inc(x);
  Until x=5;
end;


procedure TForm1.Button1Click(Sender: TObject);
begin

// 'MUH' in Array Test1 schreiben

schreib('muh', test1);

end;

procedure TForm1.Button2Click(Sender: TObject);
var x: integer;
begin

// Array (Test1) in ein MemoFeld schreiben

  x:=1;
  memo1.Lines.Clear;
 
    Repeat
      memo1.Lines.Add(test1[x]);
      inc(x);
    Until x=10;

end;

end.


Test1 ist aber leer......

Matze 7. Sep 2006 00:39

Re: Array an Function übergeben
 
Hi,

das ist wieder ein anderes Problem. :)

Du spricht die Parameterübergabe per Call-By-Reference und Call-By-Value an.

Hast du etwas deaklariert wie

Delphi-Quellcode:
procedure schreib(s: string; foo: TMyArray);
Dann ist foo eine Kopie der übergebenen Variablen. In der Funktion arbeitest du die ganze Zeit mit dieser Kopie und änderst auch nur diese.
Möchtest du allerdings die übergebene Variable ändern, muss du der Prozedur "sagen", dass sie dies tun soll. Mittels var übergibst du die Speicheradresse des Parameters und es wird dann auch in diesem geändert. Du arbeitest also nicht mehr mit einer Kopie:

Delphi-Quellcode:
procedure schreib(s: string; var foo: TMyArray);
Du kannst natürlich auch eine Funktion schreiben und das Ganze dann so aufrufen:

Delphi-Quellcode:
function schreib(s: string): TMyArray;
var
  Temp: TMyArray;
  i: Integer;
begin
  // hier das Array füllen ...
  for i := 1 to 5 do
  begin
    Temp[i] := s;
  end;

  // ... und dann als Ergebnis zurückgeben
  Result := Temp;
end;
Die Zuweisung zu deinem Array würde dann so erfolgen:

Delphi-Quellcode:
test1 := schreib('hallo');

moggaz 7. Sep 2006 00:53

Re: Array an Function übergeben
 
Ich habe bestimmt noch nicht DankeSchön gesagt oder ? *G*

Interessante neue Welt .....

Ohne Var -> mit einer Kopie arbeiten.
Mit Var -> mit dem Original arbeiten.

Also könnte es sein als ich vor 3h das mit type getestet habe einfach nur Var vergessen habe...
Nunja, hat ja keiner gesagt das Programmieren einfach ist.

In meinem Memo1 steht nun Muh .... perfekt
Funktioniert:=true; ;)




Ich wünsch Dir noch eine Gute Nacht ....... und ..... Danke ^^

Matze 7. Sep 2006 01:11

Re: Array an Function / Procedure übergeben
 
Hi

Ich muss jetzt auch wirklich mal ins Bett und ja, ich glaube, ein Dankeschön habe ich schon von dir gehört. Wobei? Eines, ne genügend. *g*

Schlaf gut und bitte. ;)

Stefan Hueg 7. Sep 2006 01:53

Re: Array an Function / Procedure übergeben
 
Ist ne feine Sache mit ByVal und ByRef. Bei Visual Basic konnte man noch explizit deklarieren ob eine Variable ByVal oder ByRef übergeben wird.

Geht vor allem bei Arrays auf jedenfall schneller als das ganze Array nochmal kopieren zu müssen.

Du musst allerdings dabei aufpassen was du wo änderst, denn das var kann man ganz schnell mal überlesen und da kannst du böse Fehler reinhauen wo du nicht genau weisst wo er liegt.

Ansonsten: Gute Nacht :)

Jürgen Thomas 7. Sep 2006 11:04

Re: Array an Function / Procedure übergeben
 
Hallo,
man kann sich unter Delphi/Win auch angewöhnen, grundsätzlich const und var anzugeben. Jürgen


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