Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi function mit 2 ausgabewerten (https://www.delphipraxis.net/83542-function-mit-2-ausgabewerten.html)

bonanza 4. Jan 2007 11:13


function mit 2 ausgabewerten
 
Hi,

ich suche nach einer möglichkeit bei einer Funktion zwei ausgabewerte zu bekommen in etwa so...

Delphi-Quellcode:
function x(a,b:string):(c,d:string)

wie kann ich das realisieren ?

über REsult kann ich ja immer nur einen wert ausgeben.

SirThornberry 4. Jan 2007 11:14

Re: function mit 2 ausgabewerten
 
das Thema hatten wir schon oft. Entweder nimmst du einen Record wo mehrere Werte drin sind oder nutzt var/out Parameter

bonanza 4. Jan 2007 11:24

Re: function mit 2 ausgabewerten
 
also ich hab jetzt ein record dafür verwand allerdings kommt ein fehler:

Delphi-Quellcode:
function tform1.finden(a,b:string):record;
var aw:record;
  aw_zx:string;
  aw_sb:string;
end;
begin
{...}

result:=aw;
end;


{fehler:[Error] Unit1.pas(207): Identifier expected but 'RECORD' found}
was mache ich falsch ?

Dax 4. Jan 2007 11:26

Re: function mit 2 ausgabewerten
 
Delphi-Quellcode:
type
  TFoo = record
    a, b: string;
  end;

function Bar(s: string): TFoo;
begin
  Result.a := s + ' <- sorum';
end;

Phoenix 4. Jan 2007 11:27

Re: function mit 2 ausgabewerten
 
Du musst den Record doch erst vorher noch definieren.

Delphi-Quellcode:
var Adresse: record
  name: string;
  plz: integer;
  ort: string;
end;

function AdresseFinden(a, b:string): Adresse;
begin
  Result.Name := 'String 1';
  Result.Plz := 'String 2';
  Result.Ort := 'String 3';
end;

Harry M. 4. Jan 2007 11:31

Re: function mit 2 ausgabewerten
 
Delphi-Quellcode:

type
  TMyResult = Record
   S: String;
   I: Integer;
   end;

function Calc(A, B: Integer): TMyResult;
begin
  Result.S := IntToStr(A + B);
  Result.I := A + B;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
  Temp: TMyResult;
begin
  Temp := Calc(1, 1);
  showmessage(Temp.S + ' / '+ IntToStr(temp.I));
end;

Hador 4. Jan 2007 12:04

Re: function mit 2 ausgabewerten
 
Um auch mal die Alternative zu zeigen:
Delphi-Quellcode:
procedure MachIrgendwas(InputA, InputB: string; var OutputA, OutputB: string);
begin
  [...]
  OutputA := 'Balblub';
  OutputB := 'Balblub';
end;
Und so kann man das ganze dann aufrufen:
Delphi-Quellcode:
var
  s1, s2: String;
begin
  [...]
  MachIrgendwas('Text1', 'Text2', s1, s2);
  ShowMessage(s1); //s1 enthält jetzt sozusagen das erste Ergebnis
  ShowMessage(s2); //s2 enthält jetzt sozusagen das zweite Ergebnis
  [...]

EDIT:
An sich würden sogar nur die beiden var-Parameter reichen, wenn du dort schon die Sachen übergibst.

RavenIV 4. Jan 2007 13:18

Re: function mit 2 ausgabewerten
 
Zitat:

Zitat von Hador
Um auch mal die Alternative zu zeigen:
Delphi-Quellcode:
procedure MachIrgendwas(InputA, InputB: string; var OutputA, OutputB: string);
begin
  [...]
  OutputA := 'Balblub';
  OutputB := 'Balblub';
end;

Wenn Du anstatt "var" "out" hinschreibst, weiis der Compiler auch gleich, was er mit den Parametern machen soll. Und auch der Mensch sieht gleich, dass er hier etwas anderst handhaben muss.


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