![]() |
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:
Und eine funktion
Var
test1: array[1..10] of string; test2: array[1..10] of string; test3: array[1..10] of string;
Delphi-Quellcode:
Ausführen möchte ich das dann etwa so .....
function such(s:string ; XXXXX???): string;
begin result:=s; end;
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 ¿ |
Re: Array an Function übergeben
Hallo und herzlich willkommen!
Das musst du über Typen, wie du richtig herausgefunden hast, lösen:
Delphi-Quellcode:
die Funktion sieht dann so aus
type
TMyArray = array[1..10] of string; var test1, test2, test3: TMyArray;
Delphi-Quellcode:
function such(s: string; Foo: TMyArray): string;
|
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:
... arbeiten.
procedure TForm1.Button1Click(Sender: TObject);
begin such('muh', test1); such('bla', test2); end; Dankeschön Ist dies dann
Delphi-Quellcode:
das selbe Prinzip ? Kann ja sein das das mal dynamisch sein muss... *G*
type
tmyarray = array of string; Hab ich schon Dankeschön gesagt ¿? PS: ![]() |
Re: Array an Function übergeben
Hi, bittesehr.
Zitat:
Delphi-Quellcode:
Beim Füllen des Arrays
type
TMyArray = array of string; var test1, test2, test3: TMyArray; ![]()
Delphi-Quellcode:
Eine mögliche Funktion wäre dann diese:
// Hier eine Länge von 2
SetLength(test1, 2); test1[0] := 'Hallo'; test1[1] := 'Tschüss';
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; |
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...... |
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:
Dann ist foo eine Kopie der übergebenen Variablen. In der Funktion arbeitest du die ganze Zeit mit dieser Kopie und änderst auch nur diese.
procedure schreib(s: string; foo: TMyArray);
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:
Du kannst natürlich auch eine Funktion schreiben und das Ganze dann so aufrufen:
procedure schreib(s: string; var foo: TMyArray);
Delphi-Quellcode:
Die Zuweisung zu deinem Array würde dann so erfolgen:
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;
Delphi-Quellcode:
test1 := schreib('hallo');
|
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 ^^ |
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. ;) |
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 :) |
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 20:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz