... 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); 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
delete(lineas[idx], 'FUNCTION ',9);assign(f, 'c:\mio.pas');
Append;
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