Ver Mensaje Individual
  #1  
Antiguo 09-10-2007
jplj jplj is offline
Miembro
 
Registrado: oct 2003
Posts: 189
Reputación: 23
jplj Va por buen camino
Asignar valores a Arrays dinámicos - (migrar datos desde CLIPPER)

Hola:

Pretendo migrar unos datos de un programa hecho en clipper. Estos datos están en forma de matrices, de forma similar a:

Código Delphi [-]

FUNCTION L_72_F_32( nS, cC )

  LOCAL aLineas:={}

  DO CASE


     CASE nS = 1 .AND. cC = "1V"
      aLineas:={ ;
        {   100,  11.20,  0.00,  0.00,  9,  1,  0.10,  -1,  1 },;
        {   500,  56.30,  2.30,  0.86,  9,  3,  1.10,  -5,  5 },;
        {   700,  79.40,  3.30,  0.61,  9,  4,  1.60,  -7,  7 },;
        {  1000, 114.70,  4.70,  0.42,  8,  6,  2.50, -10, 10 },;
        {  1200, 138.90,  5.70,  0.35,  8,  7,  3.10, -12, 12 },;
        {  1500, 176.20,  7.30,  0.28,  8,  9,  4.00, -15, 15 },;
        {  2000, 242.10,  9.90,  0.21,  7, 13,  5.60, -19, 20 },;
        {  2500, 314.70, 12.80,  0.16,  6, 18,  7.60, -24, 24 },;
        {  3000, 398.00, 16.00,  0.13,  5, 25, 10.00, -28, 28 },;
        {  3200, 436.10, 17.40,  0.12,  5, 30, 11.10, -29, 30 },;
        {  3500, 501.70, 19.80,  0.10,  4, 39, 13.30, -31, 32 },;
        {  3600, 527.00, 20.70,  0.10,  4, 44, 14.20, -32, 33 },;
        {  3700, 554.90, 21.70,  0.10,  3, 50, 15.20, -33, 34 },;
        {  3800, 586.50, 22.70,  0.09,  3, 60, 16.40, -33, 34 },;
        {  3900, 624.10, 24.00,  0.09,  2, 77, 17.90, -34, 35 },;
        {  4000, 673.60, 25.60,  0.08,  2, 77, 20.10, -35, 35 } ;
             }

     CASE nS = 1 .AND. cC = "2V"
      aLineas:={ ;
        {   500,  44.70,  2.00,  0.96, 11,  2,  0.80,  -5,  5 },;
        {  1000,  90.80,  4.20,  0.48, 11,  2,  1.90, -10, 10 },;
        {  1300, 119.30,  5.50,  0.37, 10,  3,  2.60, -13, 13 },;
        {  1500, 138.80,  6.40,  0.31, 10,  3,  3.00, -15, 15 },;
        {  2000, 189.30,  8.70,  0.23, 10,  4,  4.30, -19, 20 },;
        {  2500, 243.20, 11.20,  0.18,  9,  6,  5.60, -24, 24 },;
        {  3000, 301.80, 13.80,  0.15,  8,  8,  7.20, -28, 28 },;
        {  3500, 367.10, 16.60,  0.12,  7, 11,  9.00, -31, 32 },;
        {  4000, 443.10, 19.80,  0.10,  6, 15, 11.30, -35, 36 },;
        {  4300, 497.40, 21.90,  0.09,  5, 20, 13.10, -37, 38 },;
        {  4500, 539.80, 23.60,  0.09,  4, 25, 14.60, -38, 39 },;
        {  4600, 564.00, 24.50,  0.08,  4, 29, 15.50, -39, 40 },;
        {  4700, 591.00, 25.60,  0.08,  3, 34, 16.60, -39, 40 },;
        {  4800, 622.50, 26.70,  0.08,  3, 43, 17.80, -40, 41 },;
        {  4900, 661.70, 28.10,  0.07,  2, 62, 19.60, -40, 41 },;
        {  5000, 722.40, 30.20,  0.07,  0, 63, 22.50, -41, 41 } ;
             }

     CASE nS = 1 .AND. cC = "3V"

     .....


  ENDCASE

RETURN aLineas

Existen muchas funciones similares a FUNCTION L_72_F_32( nS, cC ) que devuelven aLineas al mismo procedimiento que se encarga de leer los datos necesarios en cada caso.
Aunque en la función expuesta sólo varía el número de filas, en otras funciones aLineas tiene distinto número de columnas, por lo que en principio creo que debo usar un array dinámico, el problema es cómo realizo la asignación de valores.
Por ahora he pensado en "traducir" los array de clipper en array de cadenas y posteriormente en una función cargar los datos en un vector numérico.

Código Delphi [-]
function L_72_F_32( nS, cC ): TArray_Dinamico_Real;
var
   aLineas: TStringList;
begin


  DO CASE


     CASE nS = 1 .AND. cC = "1V"

       aLinea.Add( '100,  11.20,  0.00,  0.00,  9,  1,  0.10,  -1,  1' );
       aLinea.Add( '500,  56.30,  2.30,  0.86,  9,  3,  1.10,  -5,  5' );
       ....
       aLinea.Add( '4000, 673.60, 25.60,  0.08,  2, 77, 20.10, -35, 35' );


     ...



     result:= Conver_aLineas(aLineas);

end;



function Conver_aLineas(aLineas): TArray_Dinamico_Real;
var
    A: TArray_Dinamico_Real;
begin

    Dimensionar A;
    Leer Valores de aLineas y cargarlos en A;

    resutl:= A;

end;

Mi pregunta es si existe un método más eficiente y sencillo.

Un Saludo
Gracias de antemano.
Juan P.
__________________
Sonríe. Mañana puede ser peor.
Responder Con Cita