PDA

Ver la Versión Completa : declarar open array


fcios
05-09-2012, 20:48:57
Hola y gracias de antemano



// 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:


type
TDynamicStringArray = array of String;

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


Llamada:


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


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