Ver Mensaje Individual
  #4  
Antiguo 09-10-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 29
Lepe Va por buen camino
... No acabo yo de pillar el tema....

Desde mi punto de vista, haría un programa que lea el archivo de clipper (se supone que puede abrirse con notepad ¿no?), lo parsea, y ahora crea un archivo de salida .pas con el contenido leido y traducido a codigo delphi.

No creas que es muy complicado hacerlo a mano, aunque TRegExpr puede servir de ayuda.

La idea:
Código Delphi [-]

procedure LeerArchivo(filename:string); // el archio clipper
var Clipper, Delphi:TStringlist;
begin
  Clipper := TStringlist.Create;
  Clipper.LoadFromFile(Filename);
  Delphi := TStringList.Create;
  CreaCabeceraDelphi;
  for i:= 0 to Archivo.Count
  if pos('FUNCTION ', Archivo[i]) <> 0 then
    Procesa_matriz( Archivo, i);
  end;
  Clipper.Free;
  Delphi.SaveToFile('c:\mio.pas');
end;

procedure CreaCabeceraDelphi;
begin
   Delphi.Add('Unit  unidad1;');
   Delphi.Add('');
   Delphi.Add('interface');
   Delphi.Add('');
   Delphi.Add('uses sysutils;');
   Delphi.Add('');
   Delphi.Add('var ');
end;

procedure Procesa_matriz(Lineas:TStrings; idx:integer);
var f:textfile;
begin

// en lineas tenemos todo el texto, a partir del índice idx tenemos la función que queremos parsear:
delete(lineas[idx], 'FUNCTION ',9);// quitamos el texto "function " de esa linea
assign(f, 'c:\mio.pas');
Append; // preparamos el archivo para seguir escribiendo en él.

writeln(Copy(Archivo[idx], 1, 9) + ' : array of array of double = (' );

Buscar_el_case_mas_cercano;

CloseFile(f);
end;
El resumen de todo esto, es que el contenido de "c:\mio.pas" queda como:
Código:
Unit Unidad1;

interface

uses sysutils;

var 
L_72_F_32 : array of array of double = (
y hasta aquí he llegado yo

Tu nuevo archivo .pas tiene los arrays creados como si los hubieses escrito tu mismo. Después ese archivo .pas lo agregas al proyecto donde lo necesites.

Edito: Por supuesto lo he escrito todo de memoria... habrá cosas que ni compile, pero bueno... ahí queda. Ya puestos, puedes crear las funciones de clipper con parámetros incluidos para que la unidad final te quede como:
Código Delphi [-]
Unit Unidad1;

interface

uses sysutils;

var 
L_72_F_32 : array of array of double = (
        (   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 )
        )

FUNCTION proc_L_72_F_32(ns:integer; CC:String):double;


implementation

FUNCTION proc_L_72_F_32(ns:integer; CC:String):double;
begin
   if (nS = 1) AND (cC = '1V') then
    Result := L_72_F_32[ los indices que sean ]
  else if ...
end;
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 10-10-2007 a las 01:32:15.
Responder Con Cita