AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Array an Function / Procedure übergeben

Ein Thema von moggaz · begonnen am 7. Sep 2006 · letzter Beitrag vom 7. Sep 2006
Antwort Antwort
moggaz

Registriert seit: 7. Sep 2006
4 Beiträge
 
#1

Array an Function / Procedure übergeben

  Alt 7. Sep 2006, 00:57
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 ¿
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Array an Function übergeben

  Alt 7. Sep 2006, 01:00
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

function such(s: string; Foo: TMyArray): string;
  Mit Zitat antworten Zitat
moggaz

Registriert seit: 7. Sep 2006
4 Beiträge
 
#3

Re: Array an Function übergeben

  Alt 7. Sep 2006, 01:10
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
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Array an Function übergeben

  Alt 7. Sep 2006, 01:23
Hi, bittesehr.

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;
  Mit Zitat antworten Zitat
moggaz

Registriert seit: 7. Sep 2006
4 Beiträge
 
#5

Re: Array an Function übergeben

  Alt 7. Sep 2006, 01:29
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......
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Array an Function übergeben

  Alt 7. Sep 2006, 01:39
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

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:

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:

test1 := schreib('hallo');
  Mit Zitat antworten Zitat
moggaz

Registriert seit: 7. Sep 2006
4 Beiträge
 
#7

Re: Array an Function übergeben

  Alt 7. Sep 2006, 01:53
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 ^^
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Array an Function / Procedure übergeben

  Alt 7. Sep 2006, 02:11
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.
  Mit Zitat antworten Zitat
Benutzerbild von Stefan Hueg
Stefan Hueg

Registriert seit: 13. Jun 2004
Ort: Gießen
187 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Array an Function / Procedure übergeben

  Alt 7. Sep 2006, 02:53
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
Stefan Hueg
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#10

Re: Array an Function / Procedure übergeben

  Alt 7. Sep 2006, 12:04
Hallo,
man kann sich unter Delphi/Win auch angewöhnen, grundsätzlich const und var anzugeben. Jürgen
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  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 08:00 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