Newsgroup: it.comp.lang.delphi
Titolo: Array bidimensionale

Salve a tutti,
ho creato un array bidimensionale di tipo CONST come questo:
    ColsYieldAnalysisArray : Array[0..2,0..1] of string =
                                                    (
                                                        (' ','0'),
                                                        ('Bid','1'),
                                                        ('Offer','1')
                                                    );
voglio passarlo come parametro di una procedura es:
CreateExtraGrid(ColsYieldAnalysisArray );
ma quando all'interno della funzione cerco di accedere ai suoi valori
mi da errore (già dal primo [0,0] per intenderci)
come posso fare?
grazie a tutti

Come lo passi? Come lo hai dichiarato? Un po' di codice non 
guasterebbe... comunque se usi una sintassi tipo:
Type
   TBiArray = Array[0..2, 0..1] Of String;
Const
      ColsYieldAnalysisArray : TBiArray =
                                        (
                                         (' ','0'),
                                         ('Bid','1'),
                                         ('Offer','1')
                                        );
e nella procedura usi una cosa tipo:
procedure CreateExtraGrid(Dati : TBiArray);
non dovresti avere problemi.
stoy...@gmail.com
 ha scritto:


 non dovresti avere problemi.
Hai ragione...
allora premettendo che io di array fatti in quel modo ne ho N con
dimensioni variabili quindi dovrei creare N type TBiArray ad hoc per
ogni singolo array. Si potrebbe fare ma poi  dovrei creare N procedure
per passare il parametro. La procedura è dichiarata così:
    procedure CreateExtraGrid(pCols : Array of string);
e la richiamo così:
   CreateExtraGrid(ColsYieldAnalysisArray);

Ho capito il problema, allora la procedura dovrebbe essere dichiarata 
cosi' procedure CreateExtraGrid(pCols : Array of array of string);
Ti copio incollo la parte dell'help relativa agli array 
multidimensionali dinamici:
-------------------------------------------
Multidimensional Dynamic Arrays
To declare multidimensional dynamic arrays, use iterated array of ... 
constructions. For example,
  type TMessageGrid = array of array of string;
var Msgs: TMessageGrid;
declares a two-dimensional array of strings. To instantiate this array, 
call SetLength with two integer arguments. For example, if I and J are 
integer-valued variables,
  SetLength(Msgs,I,J);
allocates an I-by-J array, and Msgs[0,0] denotes an element of that array.
You can create multidimensional dynamic arrays that are not rectangular. 
The first step is to call SetLength, passing it parameters for the first 
n dimensions of the array. For example,
  var Ints: array of array of Integer;
SetLength(Ints,10);
allocates ten rows for Ints but no columns. Later, you can allocate the 
columns one at a time (giving them different lengths); for example
  SetLength(Ints[2], 5);
makes the third column of Ints five integers long. At this point (even 
if the other columns haven't been allocated) you can assign values to 
the third column - for example, Ints[2,4] := 6.
The following example uses dynamic arrays (and the 
Borland.Vcl.SysUtils.IntToStr function declared in the SysUtils unit) to 
create a triangular matrix of strings.
  var
   A : array of array of string;
   I, J : Integer;
   begin
     SetLength(A, 10);
     for I := Low(A) to High(A) do
       begin
         SetLength(A[I], I);
         for J := Low(A[I]) to High(A[I]) do
           A[I,J] := IntToStr(I) + ',' + IntToStr(J) + ' ';
       end;
   end;
-------------------------------------------



No perché da' errore di compilazione dichiarare una procedure
CreateExtraGrid(pCols : Array of array of string);
Identifier expected but 'ARRAY' found..

 Identifier expected but 'ARRAY' found..
Che versione di Delphi Usi?

 Che versione di Delphi Usi?
CodeGear RAD Studio 2007


Niente da fare le stò provando tutte..anche utilizzando un array of
array come tipo di costante e cercandola di passare come array mi da
errore..

Allora fai cosi':
Dichiara un tipo come questo:
Type
   TMultiArray = Array Of Array Of String;
..poi dichiari gli array come fai di solito (devono partire da 0 come 
indice minimo) - esempio:
Const
   ColsYieldAnalysisArray  : Array[0..2, 0..1] Of String = (('A','0'),
                                                            ('Bid','1'),
                                                            ('Offer','1')
                                                            );
..ora la procedura di utilizzo dell'array deve essere cosi':
Procedure CreateExtraGrid(pCols : TMultiArray);
ma prima di chiamarla devi trasformare l'array che usi nella forma 
imposta dal tipo TMultiArray usando una cosa tipo (faccio l'esempio con 
ColsYelsAnalysisArray):
Var
   V    : TMultiArray;
   I, J : Integer;
begin
   SetLength(V, High(ColsYelsAnalysisArray)+1);
   For I := Low(V) To High(V) Do
       Begin
         SetLength(V[I], High(ColsYelsAnalysisArray[I])+1);
         For J := Low(V[I]) to High(V[I]) Do V[I,J] := 
ColsYelsAnalysisArray[I, J];
       End;
   .. qui' chiami la tua procedura CreateExtraGrid passandogli il tuo 
array ..
end;
lo so che e' una cosa un po' rompiscatole ma non vedo altri metodi
stoy...@gmail.com
 ha scritto:


 lo so che e' una cosa un po' rompiscatole ma non vedo altri metodi
Infatti..
Ciao
-- 
Morde