• Jueves 28 de Marzo de 2024, 20:14

Autor Tema:  Leer Y Modificar Archivo .dat  (Leído 20525 veces)

jeraco

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Leer Y Modificar Archivo .dat
« en: Miércoles 12 de Diciembre de 2007, 21:49 »
0
Buenas tardes, si alguien me puede ayudar a resolver este problema:
Tengo archivo llamado aclie.dat con la siguiente estructura:
Código: Text
  1.  
  2. program cliente;
  3. uses
  4. crt, dos;
  5. Type
  6.   RegSplCliente  = Record
  7.                         Case Byte Of
  8.                          0: ( Conf:         RegConfArchivo);
  9.                          1: ( Codigo:       String[KL];
  10.                               Descripcion,
  11.                               Representante,
  12.                               Direccion1,
  13.                               Direccion2:   String[40];
  14.                               Telefonos:    String[30];
  15.                               ZonaC,
  16.                               VendC:        String[KM];
  17.                               Clase:        String[KO];
  18.                               MesVenc:      SmallInt;
  19.                               TipoPVP:      Byte;
  20.                               CreditoStat:  Byte;
  21.                               MaxCredito,   {maximo credito permitido}
  22.                               PagosA,       {pagos anticipados}
  23.                               SaldoP,       {saldo pendiente}
  24.                               MontoMax,     {Monto maximo venta}
  25.                               MontoMaxCre,  {maximo credito}
  26.                               IVARetenido:  Real;
  27.                               UltimaV,
  28.                               UltimoP:      RegUltimaOperacion;
  29.                               ChequesD:     Array[1..5] Of RegUltimaOperacion;
  30.                               PromDay:      SmallInt;
  31.                               NDays:        SmallInt;
  32.                               RIF:          String[15];
  33.                               TipoIva:      Char;
  34.                               UVend:        String[KM]; {Ultimovendedor}
  35.                               IntMora:      Boolean;
  36.                               BitVarios:    Byte;
  37. {$IFNDEF CHILE}
  38.   {$IFNDEF COLOMBIA}
  39.                               NIT:          String[15];
  40.   {$ELSE}
  41.                               Dummy0:       Array[1..16] Of Byte;
  42.   {$ENDIF}
  43. {$ELSE}
  44.                               Dummy0:       Array[1..16] Of Byte;
  45. {$ENDIF}
  46.                               Estadistics:  Array[1..NMes,1..EstC] Of Real;
  47.                               {Cambios del dia  12-9-98 OJO !!!}
  48.                               FlagContab:   Boolean;
  49.                               CuentaContab: String[25];
  50.                               Descuento:    Real;
  51.                               Dummy2:       Array[1..50] Of Byte;
  52.                               );
  53.                       End;
  54.  
  55.      RegCliente     = Record
  56.                         Status:   LongInt;
  57.                         Special:  RegSplCliente;
  58.                         DataArea: Array[1..1] Of Byte;
  59.                       End;
  60.  
  61.  
  62. Var F: File of Regcliente;
  63.     P: Regcliente;
  64.    
  65. Begin
  66.   clrscr;
  67.   Assign(F,'aclie.dat');
  68.   reset(F);
  69.   while not Eof(F)  do
  70.    begin
  71.     read(F,P);
  72.     with P,special do
  73.     begin
  74.      maxcredito:=maxcredito/1000;
  75.      saldop:=saldop/1000;
  76.      montomax:=montomax/1000;
  77.      montomaxcre:=montomaxcre/1000;
  78.     end;
  79.     seek(F,filepos(F)-1);
  80.     write(F,P);
  81.    end;
  82.   close(F);
  83.  end.
  84.  
  85.  
El problema es que el compila Bien, pero cuando lo ejecuto da un error 100
si alguien tiene una solucion, para modificar y accesar este archivo seria de suma ayuda
gracias

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #1 en: Miércoles 12 de Diciembre de 2007, 22:42 »
0
Me sorprende que el codigo compile. Al parecer está escrito usando las librerias de Turbo Pascal pero el codigo es de Free Pascal o Delphi.
No le detecto fallas exepto que el archivo no exista en la carpeta de la ejecutable.
Código: Text
  1.  
  2. P,special
  3.  
  4.  
Alli va un "." y no una coma. (medio dificil que compile)

jeraco

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #2 en: Jueves 13 de Diciembre de 2007, 14:56 »
0
amigo enko, ya todo eso de archivo en carpeta y compilacion ya fue descartado de hecho hice el mimo codigo para otro archivo que se llama aprod.dat (del sistema Saint) y funciono bien. Yo creo que el error esta en el Record anidado o en en la longitud del campo Dummi2 pero no encuentro la solucion. En cuanto a la parte del codigo p,special es por que lee con el with a p y tambien a special  la sintaxis esta bien necesito otro tipo de ayuda que no se limite a buscar una simple coma porque ese no es el problema

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #3 en: Jueves 13 de Diciembre de 2007, 20:17 »
0
Citar
Yo creo que el error esta en el Record anidado o en en la longitud del campo Dummi2 pero no encuentro la solucion
Supongo que tienes razón ahí.
Lo más probable es que esté mal la estructura de los registros. Pero con eso no hay que te ayude pues no se cual debería ser la estructura correcta.

Lo que puedes intentar es abrir el archivo *.dat en cuestion con un editor hexadecimal y comprobar vos mismo como es la estructura correcta. (supongo que te llevará bastante tiempo).

De donde conseguiste la info sobre la estructura del archivo? Si está en un manual comprueba que esté bien. Si la creaste vos, sería rarisimo.


Citar
En cuanto a la parte del codigo p,special es por que lee con el with a p y tambien a specia
Si el problema es que "p" es de tipo "Regcliente"  y "Special" es de tipo  RegSplCliente
Como veras, son dos tipos de datos distintos.
Como si esto fuera poco:
Citar
RegCliente     = Record
                       Status:   LongInt;
                       Special:  RegSplCliente;
                       DataArea: Array[1..1] Of Byte;
                     End;
RegSplCliente forma parte de RegCliente. Por eso es que va un "." y no una coma.
Citar
with P,special do
   begin
    maxcredito:=maxcredito/1000;
    saldop:=saldop/1000;
    montomax:=montomax/1000;
    montomaxcre:=montomaxcre/1000;
   end;
maxcredito, saldop, montomax, montomaxcre forman parte de "RegSplCliente" y no de RegCliente, por eso que va el punto ya que se quiere acceder a los campos de p.Special : RegSplCliente; pues estos campos no son parte de P sino de p.special


Citar
RegCliente     = Record
                       Status:   LongInt;
                       Special:  RegSplCliente;
                       DataArea: Array[1..1] Of Byte;
                     End;
Citar
DataArea: Array[1..1] Of Byte;
1 byte solo, seguro?

jeraco

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #4 en: Viernes 14 de Diciembre de 2007, 18:07 »
0
Muchas gracias enko pero me guastaria saber como harias tu una rutina para leer ese archivo con esa informacion y modicar los campos. Cambie incluso el with dando la direccion completa del campo ejemplo: p.special.maxcredito:=p.special.maxcredito/1000; y todas maneras el archivo revienta y no hace el cambio (no se por que) tal vez haya otra forma de leer ese archivo pregunto?

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #5 en: Viernes 14 de Diciembre de 2007, 20:30 »
0
Un problema menos :)
Nos sigue faltando que funcione.
El problema aqui es que yo no se la estructura correcta del archivo y supongo que ves tampoco pues estas teniendo ese problema.

una pregutna: ¿De donde conseguiste la info de ese archivo o quien te lo paso?

una cosa que podrias intentar es ejecutar tu codigo una sola vez, es decir, no hacerlo dentro del bucle "while not eof".
Si funciona, pueden suceder dos cosas:
*tenes mal los records (lo mas probable):
  tu estructura no concide con la del archivo, por eso que al final, intenta leer datos que no existen en disco, ahí sale ese error de lectura.
*el archivo está corrupto (muy poco probable pero no imposible):
  el archivo le fatlan datos al final y cuando intentas leer la estructura completa, se trunca y tira el error.

la unica solucion que tendrias disponible solo con los datos de este hilo es usar un editor hexadecimal y comprobar la estructura vos mismo.
La otra, seria averigual la estructura correcta del que te paso el arhcivo.
Si vos lo creaste, pues no se cual es el problema entonces.
Citar
with X do
begin
end
[CODE]
Es de free pascal y de Delphi. Turbo pascal si mi memoria no falla, no tiene esas intrucciones.

jeraco

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #6 en: Viernes 14 de Diciembre de 2007, 22:33 »
0
enko probe el programa agregando un contador de registro (i:=i+1;) y validando con los 300 registros es decir and (i<=300)) y no revienta pero no hace los cambios sobre las variables del archivo. te envie un msg a tu correo electronico encoreaver@xxxxx con toda la libreria de la estructura de los archivos de saint asi como el archivo aclie.dat a ver que puedes encontrar. Te agradeceria mucho si puedes ayudarme en esto
Gracias de antemano por tu pronta respuesta

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #7 en: Sábado 15 de Diciembre de 2007, 00:00 »
0
Hola, leí tu mail y te lo respondí.
Por sierto, si tu problema es ahora que no puedes guardar los campos modificados en el archvio aclie.dat pues intenta guardar todos esos registros en un archivo temporal llamado por ejemplo temp.dat y luego lo renombras por aclie.dat y listo.

jeraco

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #8 en: Sábado 15 de Diciembre de 2007, 14:44 »
0
Gracias, pero ese no es el problema, al igual que el archivo de clientes tambien hay que cambiar la data de inventario, proveedores, cxp, cxc pero a partir del º1ero de enero por el cambio a Bs. Fuerte, es decir en este momento funcionan bien pero el Saint no trae una opcion que te permita dividir por 100o todos los campos y es por eso que hay que tratar de hacer una aplicacion externa que modifique los archivos .dat del sistema. Comoveras en el email, la informacion de todos esos archivos en cuanto a su estructura se encuentra en un archivo llamado tipos.doc que a su vez es la liberia con que supuestamente ellos (los programadores de Saint) construyeron la data (record) de cada uno de los archivos aprod, aclie, aprov, acXcc, acxcp.
Saludos

Enko

  • Miembro de PLATA
  • *****
  • Mensajes: 1562
  • Nacionalidad: 00
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #9 en: Sábado 15 de Diciembre de 2007, 20:03 »
0
Por sierto, este sistema Saint, es para Windows Verdad?

Este codigo funciono bien supongo. Usé Delphi aunqeu tambien funcionaría con Free Pascal. No tuve ningun error al correr y al parecer los cambios se hicieron bien.
Código: Text
  1.  
  2. program Project2;
  3.  
  4. {&#036;APPTYPE CONSOLE}
  5. {&#036;DEFINE COLOMBIA}
  6.  
  7. uses
  8.   SysUtils,
  9.   Tipos in 'tipos.pas';
  10. var
  11.   F: File of Regcliente;
  12.   P: RegCliente;
  13. begin
  14.    Assign(F,'aclie.dat');
  15.    reset(F);
  16.    while not Eof(F)  do
  17.    begin
  18.       read(F,P);
  19.       with P.Special do
  20.       begin
  21.         maxcredito:=maxcredito/1000;
  22.         saldop:=saldop/1000;
  23.         montomax:=montomax/1000;
  24.         montomaxcre:=montomaxcre/1000;
  25.       end;
  26.       seek(F,filepos(F)-1);
  27.       write(F,P);
  28.   end;
  29.   close(F);
  30.   ReadLn;
  31. end.
  32.  
  33.  
Te adjunto provisoriamente el archivo aclie.dat modificado. Pruebalo y me contas.
La contraseña te la paso por mail.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

jeraco

  • Nuevo Miembro
  • *
  • Mensajes: 6
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #10 en: Sábado 15 de Diciembre de 2007, 22:19 »
0
Muchas gracias enko pro tu preocupacion pero creo que voy a dar por perdidad esta batalla contra los archivos de Saint. La rutina esta bien, al igual que la que te comente pero igualmente no hace ningun cambio sobre el archivo de clientes. es algo extremadamente raro pero asi es. NO funciona.
de todas maneras gracias por tu preocupacion y por tu esfuerzo. Saludos desde aqui en Valencia edo. Carabobo Venezuela. Gracias Totales (soda Stereo)

system_one

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #11 en: Miércoles 26 de Diciembre de 2007, 03:45 »
0
JERACO lo mas probable es que el registro NO sea el ORIGINAL!. osea haya sido modificado por haberse agregado nuevas columnas y no te haya  informado el cliente o no lo sepa. debes revisar en la opcion instala/archivos del sistema/ estructura de archivos/ clientes

A mi me dio el mismo error y era por ESO.

Yo estoy revisando de como hacer para esos casos justamente.!!!! pero me falta informacion tecnica de SAINT!!. de como maneja las alteraciones/modificaciones de los archivos.

Jeraco si me puedes pasar por favor copia de  la estructura del archivo que le enviates a enko tipos.pas/doc te agradesco infinitamente la que yo tengo esta incompleta!.

ELX

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #12 en: Sábado 6 de Junio de 2009, 23:38 »
0
Yo hice las rutinas para leer el archvio de productos, facturas de compras y ventas, pero el de clientes no he encontrado la manera. Alguiensabe en donde esta el error. Saint Administrativo 7.51 archivo aclie.dat o aprov.dat

rubert

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #13 en: Miércoles 15 de Julio de 2009, 13:18 »
0
Cita de: "jeraco"
Buenas tardes, si alguien me puede ayudar a resolver este problema:
Tengo archivo llamado aclie.dat con la siguiente estructura:
Código: Text
  1.  
  2. program cliente;
  3. uses
  4. crt, dos;
  5. Type
  6.   RegSplCliente  = Record
  7.                         Case Byte Of
  8.                          0: ( Conf:         RegConfArchivo);
  9.                          1: ( Codigo:       String[KL];
  10.                               Descripcion,
  11.                               Representante,
  12.                               Direccion1,
  13.                               Direccion2:   String[40];
  14.                               Telefonos:    String[30];
  15.                               ZonaC,
  16.                               VendC:        String[KM];
  17.                               Clase:        String[KO];
  18.                               MesVenc:      SmallInt;
  19.                               TipoPVP:      Byte;
  20.                               CreditoStat:  Byte;
  21.                               MaxCredito,   {maximo credito permitido}
  22.                               PagosA,       {pagos anticipados}
  23.                               SaldoP,       {saldo pendiente}
  24.                               MontoMax,     {Monto maximo venta}
  25.                               MontoMaxCre,  {maximo credito}
  26.                               IVARetenido:  Real;
  27.                               UltimaV,
  28.                               UltimoP:      RegUltimaOperacion;
  29.                               ChequesD:     Array[1..5] Of RegUltimaOperacion;
  30.                               PromDay:      SmallInt;
  31.                               NDays:        SmallInt;
  32.                               RIF:          String[15];
  33.                               TipoIva:      Char;
  34.                               UVend:        String[KM]; {Ultimovendedor}
  35.                               IntMora:      Boolean;
  36.                               BitVarios:    Byte;
  37. {$IFNDEF CHILE}
  38.   {$IFNDEF COLOMBIA}
  39.                               NIT:          String[15];
  40.   {$ELSE}
  41.                               Dummy0:       Array[1..16] Of Byte;
  42.   {$ENDIF}
  43. {$ELSE}
  44.                               Dummy0:       Array[1..16] Of Byte;
  45. {$ENDIF}
  46.                               Estadistics:  Array[1..NMes,1..EstC] Of Real;
  47.                               {Cambios del dia  12-9-98 OJO !!!}
  48.                               FlagContab:   Boolean;
  49.                               CuentaContab: String[25];
  50.                               Descuento:    Real;
  51.                               Dummy2:       Array[1..50] Of Byte;
  52.                               );
  53.                       End;
  54.  
  55.      RegCliente     = Record
  56.                         Status:   LongInt;
  57.                         Special:  RegSplCliente;
  58.                         DataArea: Array[1..1] Of Byte;
  59.                       End;
  60.  
  61.  
  62. Var F: File of Regcliente;
  63.     P: Regcliente;
  64.     
  65. Begin
  66.   clrscr;
  67.   Assign(F,'aclie.dat');
  68.   reset(F);
  69.   while not Eof(F)  do
  70.    begin
  71.     read(F,P);
  72.     with P,special do
  73.     begin
  74.      maxcredito:=maxcredito/1000;
  75.      saldop:=saldop/1000;
  76.      montomax:=montomax/1000;
  77.      montomaxcre:=montomaxcre/1000;
  78.     end;
  79.     seek(F,filepos(F)-1);
  80.     write(F,P);
  81.    end;
  82.   close(F);
  83.  end.
  84.  
  85.  
El problema es que el compila Bien, pero cuando lo ejecuto da un error 100
si alguien tiene una solucion, para modificar y accesar este archivo seria de suma ayuda
gracias

rubert

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Leer Y Modificar Archivo .dat
« Respuesta #14 en: Miércoles 15 de Julio de 2009, 13:24 »
0
Hola Jerako Buenos dias.

Amigo estube viendo en el foo que tu lograste leer el archivo aprod.dat del saint 7.51 este archivo es que que guarda la informacion de los datos de productos del inventario
hermano yo estoy interesado en esa rutina que te permite leerla el motivo es el siguiente:

tengo una base de datos hecha el visual foxpro y tengo que pasar los datos para el aprod.dat, ya converti los datos en en un archivo .txt  pero la verdad es que no tengo
conocimiento de pascal ya que programo en foxpro,clipper y visual foxpro si puedes ayudarme te lo agradezco mi correo es  rubertrequena@hotmail.com


saludos y gracias de antemano

m0skit0

  • Miembro de PLATA
  • *****
  • Mensajes: 2337
  • Nacionalidad: ma
    • Ver Perfil
    • http://fr33kk0mpu73r.blogspot.com/
Re: Leer Y Modificar Archivo .dat
« Respuesta #15 en: Jueves 16 de Julio de 2009, 13:50 »
0
A ver si miramos las fechas de los hilos antes de contestar... Que éste es del 2007  :lol:

jhernancanom

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Leer y modificar archivo .DAT
« Respuesta #16 en: Lunes 5 de Noviembre de 2012, 23:40 »
0
Buenas tardes, muchachos.

Tengo una aplicación mía desarrollada en un lenguaje diferente al de SAINT. La contabilidad de mi cliente es SAINT para DOS.
Se necesita contabilizar las facturas de mi aplicación (llevarlas a SAINT).
¿Me indican dónde hay info sobre cómo manejar esta situación?

Veo que ustedes aquí muestran algo en Pascal, pero sólo para un archivo maestro. ¿Tienen info sobre otros archivos y sobre movimiento de facturación?

Lo que necesito implementar es: (1) grabar Facturas en el movimiento contable, y (2) grabar clientes nuevos en el maestro de Terceros.

Mi email es jhernancanom de HotMail.

Gracias.