Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   declarar open array (https://www.clubdelphi.com/foros/showthread.php?t=80125)

fcios 05-09-2012 20:48:57

declarar open array
 
Hola y gracias de antemano

Código Delphi [-]

// tengo definida esta funcion
mifuncion1( aCampos: array of string):boolean;

// y la llamo con
mifuncion1(['c1','c2','1','2'])

// pero quiero poder mandarle otro array, por ejemplo

mifuncion1(['a1','a2','a3','a4'],['b1','b2','b3','b4']) // esto no compila :(
// ó
mifuncion1([['a1','a2','a3','a4'],['b1','b2','b3','b4']]) // esto tampoco compila  :(

como debo definirla ? :confused:
ó como le debo mandar los arrays

Gracias

roman 05-09-2012 20:54:11

¿Y por qué habría de compilar?

Tu función está declarada para aceptar un sólo parámetro y quieres pasarle dos (cada arreglo es un parámetro).

// Saludos

fcios 05-09-2012 21:07:10

:D bueno bárbaro y entonces como la defino ?

roman 05-09-2012 21:21:46

¿Poniendo dos parámetros en la definición? :rolleyes:

// Saludos

fcios 05-09-2012 22:08:30

sí pero la quiero definir para poder mandarle n parámetros
y con array of array of string me da error en la definición

roman 05-09-2012 22:44:29

No estoy seguro, pero creo que no puedes tener arreglos multidimensionales como parámetros abiertos. A lo sumo, puedes hacer una combinación de parámetros abiertos y arreglos dinámicos:

Código Delphi [-]
type
  TDynamicStringArray = array of String;

procedure Foo(MultiArray: array of TDynamicStringArray);
begin
end;

Llamada:

Código Delphi [-]
var
  A, B: TDynamicStringArray;

begin
  SetLength(A, 2);
  A[0] := 'Hola'; A[1] := 'mundo';

  SetLength(B, 4);
  B[0] := 'ClubDelphi';
  B[1] := 'es';
  B[2] := 'el';
  B[3] := 'mejor';

  Foo([A, B]);
end;

// Saludos

cloayza 06-09-2012 16:41:31

Podría ser

Código Delphi [-]
type
  TArrayString=array of array of string;

procedure TForm3.Button2Click(Sender: TObject);
var
   AValues:TArrayString;
   i,j:Integer;
begin
     {Dimensionas la matriz 2x3}
     SetLength(AValues,2,3);

     {asignas valores}
     for i := Low(AValues) to High(AValues) do
         for j := Low(AValues[i]) to High(AValues[i]) do
             AValues[i,j]:=IntToStr(i*j);

     {Procesa la matriz: la tira a un tmemo}
     FncString(AValues);
end;

procedure TForm3.FncString(AValues:TArrayString);
var i,j:Integer;
begin
     for i := Low(AValues) to High(AValues) do
         for j := Low(AValues[i]) to High(AValues[i]) do
             Memo1.Lines.Add(Format('AValue(%d,%d)=%s',[i,j,AValues[i,j]]));
end;

Saludos cordiales

fcios 07-09-2012 00:33:09

Gracias Roman y cloayza

pero la idea es poder llamarla sin tener que andar definiendo una matriz antes de llamarla


La franja horaria es GMT +2. Ahora son las 02:51:34.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi