Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Manipulacion de Ficheros en Pascal (https://www.clubdelphi.com/foros/showthread.php?t=40433)

armadillo 16-02-2007 12:00:03

Manipulacion de Ficheros en Pascal
 
Hola Foristas!!!
A ver si me pueden dar una mano, necesito si o si y no tengo otra alternativa, que acceder a un archivo/fichero del tipo .DAT, de los que cuando estudiabamos utilizabamos en nuestros primeror programillas de "Agenda".
Uso Delphi 7, el agrabante que tengo con este fichero, es que pertenece a una aplicacion hecha en C, al estructura de este archivo es la siguiente:
Cita:

/*---- LONGITUDES CAMPOS -------------------------------------------------*/
#define DLC_COD 10 // Códigos
#define DLC_CAR 16 // Código artículo
#define DLC_SCA 40 // Subcódigo almacén
#define DLC_COS 20 // Centro de coste
#define DLC_CLA 10 // Clasificaciones
#define DLC_NOM 60 // Nombre
#define DLC_NRE 35 // Nombre reducido
#define DLC_DIR 60 // Dirección
#define DLC_CPO 10 // Cóigo postal
#define DLC_POB 40 // Població
#define DLC_PRV 30 // Provincia
#define DLC_CPA 2 // Cóigo país
#define DLC_PAI 30 // Paí
#define DLC_CIF 14 // CIF
#define DLC_TFN 18 // Teléfono
#define DLC_EMA 50 // E-Mail
#define DLC_IBA 30 // IBAN


/*---- CLIENTES ----------------------------------------------------------*/
typedef struct {
/*---- Datos registro */
MDR dr;
/*---- Datos personales */
char cod[DLC_COD],nom[DLC_NOM];
char dir[DLC_DIR],cpos[DLC_CPO],pob[DLC_POB];
char prov[DLC_PRV],cpais[DLC_CPA],pais[DLC_PAI];
char nomc[DLC_NOM],cif[DLC_CIF];
char tfn[2][DLC_TFN],fax[DLC_TFN],email[DLC_EMA];
/*---- Enlaces */
char rep[DLC_COD],fcli[DLC_COD];
char web[60];
/*---- Clasificaciones */
char cla[2][DLC_CLA];
char nomabr[20];
/*---- Datos cobro */
char forpa[DLC_COD];
char domico[24],dirco[24],iban[DLC_IBA];
short dpm[3],dps[2],dfac[3];
FEC dpv1[3],dpv2[3];
char ajupa;
double riemax;
/*---- Datos retenciones */
char rcta[DLC_COD];
float rpor;
char fRetBas;
/*---- Datos especiales */
char blo,riva,tipexe,afac,aval;
short cfac;
char prcco[10];
/*---- Datos varios */
char obs[2][60],obsdoc[60],libuso[3][40];
/*---- Datos envio */
char diren[5][DLC_DIR];
char cposen[5][DLC_CPO],poben[5][DLC_POB];
char proven[5][DLC_PRV],cpaisen[5][DLC_CPA],paisen[5][DLC_PAI];
char foren[5][20],porpd[5];
char tfne[5][2][DLC_TFN],faxe[5][DLC_TFN];
char emaile[5][DLC_EMA];
/*---- Datos contactos */
char perc[4][60],carc[4][30],tfnc[4][DLC_TFN],emailc[4][DLC_EMA];
/*---- Reserva */
char reserva[26];
} CLI;
Aclaro una cosa el dato MDR es otra estructura declarada anteriormente, con que solo me digan como pasar esto a Delphi me sirve.

Al comienzo del fichero hay 2048 bytes de cabecera reservada en los que actualmente se guarda la versión del fichero y luego vienen los registros uno tras otro con esa estructura.

El problema que tengo no es que no sepa trabajar con ficheros y estructuras de registros en Delphi, el problema lo tengo en que no tengo ni idea de C (Fui un negado toda la vida) :-(
Por eso es que acudo a vosotros, a ver si me pueden traducir esta estructura en registros o sea, traducir el Struct en Record...

Muchas gracias por vuestra ayuda

JF Sebastian 16-02-2007 17:23:03

Es muy facil. Tienes que cambiar el typedef struct {...} CLI por record ... end y dentro substituir los char cod[DCL_COD]... por cod: array[1..DCL_COD] of char.
Los #define DCL_COD 10 ... los sustituyes por const DCL_COD=19; ....
short dpm[3] --> dpm: array[1..3] of shortint
char ajupa --> ajupa: char;
double riemax --> riemax: double;
float rport --> rport: single;
char diren[5][DCL_DIR] --> diren: array[1..5,1..DCL_DIR] of char;

etc,

armadillo 16-02-2007 17:29:17

Sebastian Gracias...
:eek: Me has abierto los ojos jejeje, a veces cuando uno no sabe algo, parece que se ha metido en un laberinto sin salida y le parecen las cosas muy dificiles....

Pues nada, nuevamente gracias y una cosa mas que se aprende...

Jose Roman 16-02-2007 19:47:11

Sebastian tengo un problema parecido a ver mque me aconsejas, los ficheros que poseo son binario y estan hechos en el viejo lenguaje GWBASIC, donde laboro me han preguntado si puedo transformar esos ficheros a CVS. ¿se pueden leer esos ficheros realizados bajo ese lenguaje y conociendo la longitud de los campos?, si es asi como????

JF Sebastian 16-02-2007 20:23:38

Tienes que conocer muy bien la estructura del fichero y la extension de sus campos en bytes para poder aplicar el mismo tipo de variables en delphi. Por lo demas no creo que haya ningun problema a la hora de leer el fichero pues la escritura del fichero es independiente del lenguaje siempre y cuando se empleen los mismos tipos de datos. Otra cosa seria la codificacion de los numeros en coma flotante que si es IEEE no hay problema pero si no habria que descodificarlos al convenio de delphi. De todos modos se puede leer la informacion byte a byte abriendo el fichero como file of byte...


La franja horaria es GMT +2. Ahora son las 10:08:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi