Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-03-2007
Isabel_AS Isabel_AS is offline
Registrado
 
Registrado: ene 2007
Posts: 9
Poder: 0
Isabel_AS Va por buen camino
Question Lectura de fichero clipper

Hola:
Estoy intentando leer un fichero e interpretar los datos que contiene para incorporarlos a mi BD pero no lo consigo del todo.

El fichero en cuestión proviene de una aplicación hecha en clipper para msdos y contiene información en texto y en ??.

Me gustaría coger la información que "entiendo" y saltarme el resto hasta el siguiente "¿registro?", pero no soy capaz de leer el marcador que hay antes de cada código de cliente desde delphi.

No suelo trabajar con ficheros y me estoy haciendo un lío con los File, TextFile y File of, no se cuál de ellos usar.

El marcador que hay antes de cada código es una cadena de 00 en hexadecimal (en algunos casos 32 seguidos y en otros más).

Mi código de momento está en este punto:

procedure TfrmMain.Convierte;
var
i, nNulo: integer;
Ch: WideChar;
FPaciente : TextFile;
begin
// Abrimos el fichero @PACIENT
AssignFile(FPaciente, RutaOrigen + '@PACIENT');
Reset(FPaciente);
...
// Aquí leo datos de texto conocidos
for i := 1 to 4 do begin
Read(FPaciente, Ch);
MyCodigo := MyCodigo + Ch;
end;
// Nombre
MyNombre := '';
for i := 1 to 30 do begin // [ 5.. 34] Nombre = Nombre
Read(FPaciente, Ch);
MyNombre := MyNombre + Ch;
end;
...
// Cuando llego a los caracteres especiales me los quiero saltar hasta encotrar los nulos y el código siguiente
repeat
// Intento leer hasta el final del registro
nNulo := 0;
repeat
Read(FPaciente, Ch);
if (Ch = $00) then <-- Esta comparación es la que no se hacer
nNulo := nNulo + 1
else
nNulo := 0;
until (nNulo >= 32);
// Quiero llegar al final de los nulos (porque a veces hay más de 32)
repeat
Read(FPaciente, Ch);
until (Ch <> $00);

// Intento leer el código siguiente
MyCodigo2 := '';
MyCodigo2 := MyCodigo2 + Ch;
for i := 1 to 3 do begin
Read(FPaciente, Ch);
MyCodigo2 := MyCodigo2 + Ch;
end;
until ((StrToInt64Def(MyCodigo2, -1) <> -1)); // Si lo siguiente a los nulos no es un código, sigo leyendo...
...
end;

¿Alguna ayuda, por favor? Muchas gracias.
Responder Con Cita
  #2  
Antiguo 29-03-2007
afxe afxe is offline
Miembro
 
Registrado: jul 2004
Ubicación: Malaga-España
Posts: 273
Poder: 20
afxe Va por buen camino
Lectura ficheros clipper.

Hace algunos años tuve que hacer algo parecido. Encontré una librería de componentes de acceso a datos XBase (clipper, foxpro, dbase...) que me permitían abrir los ficheros clipper, como si fueran tablas paradox. Se llamaba Apollo. He visto algo aquí: http://www.abox.com/productos.asp?pid=78 no obstante, yo la obtuve gratuíta (creo que estaba acotada en tiempo)

Saludos.
Responder Con Cita
  #3  
Antiguo 30-03-2007
Avatar de fjcg02
[fjcg02] fjcg02 is offline
Miembro Premium
 
Registrado: dic 2003
Ubicación: Zamudio
Posts: 1.410
Poder: 22
fjcg02 Va camino a la fama
Según los datos que manejo, los datos de clipper son archivos .dbf. Sin tener que entrar en 'interpretarlos'`por código directamente, es un estandard que se puede leer con múltiples programas.
Excel, importarlos desde acces, crear un odbc para utilizarlo con el programa que quieras, ...
Desde delphi hay acceso directo con el objeto Ttable y TQuery, indicando como BBDD el directorio donde se encuentra el fichero, siendo cada fichero dbf del directorio una tabla.

Suerte y un saludo
__________________
Cuando los grillos cantan, es que es de noche - viejo proverbio chino -
Responder Con Cita
  #4  
Antiguo 30-03-2007
Isabel_AS Isabel_AS is offline
Registrado
 
Registrado: ene 2007
Posts: 9
Poder: 0
Isabel_AS Va por buen camino
Gracias por las respuestas.

El caso es que no se trata de ficheros .dbf. Son unos ficheros sin extensión, cuyo nombre empieza por @, como @CONSULT, también hay otros ficheros con extensiones raras (.RDI, .RDD, .DOV, .CFG, ...), pero se que los datos que busco están en los ficheros sin extensión.

De momento he seguido por el camino que comentaba al principio, usando para la comparación que no sabía hacer la función CompareMem:
CompareMem(@Ch, @Nulo, 1);
y chequeando si es final de fichero antes de cada lectura, y no va del todo mal.... ¡¡hasta que me dice que es es el final del fichero sin serlo!!
Responder Con Cita
  #5  
Antiguo 30-03-2007
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Las extensiones no indican necesariamente el formato en que se encuentran almacenados los datos. Si es Clipper forzosamente algunos de esos archivos no son mas que DBFs con extensiones cambiadas.

Entre las que mencionas RDI y RDD son manejadores de Clipper que le permiten crear tablas de diferentes sabores (Clipper, Fox, etc.) así que esos no tienen caso. Prueba abrirlas con DataBase desktop, aunque tengan extensiones no DBF...verás que mas de una si podras abrirla.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #6  
Antiguo 02-04-2007
Isabel_AS Isabel_AS is offline
Registrado
 
Registrado: ene 2007
Posts: 9
Poder: 0
Isabel_AS Va por buen camino
Ooohhh, AzidRain, lo primero que he probado al llegar al trabajo ha sido probar a cambiar las extensiones, pero no va, el DataBase Desktop me dice lo de "Unable to open table", "Corrupt table/index header".

Sigo con mi camino inicial, el problema que tenía de que cree que es el final del fichero sin serlo aún, lo he solucionado leyendo todo y escribiéndolo en un fichero auxiliar quitando los valores (en hexadecimal) $1A que es donde se "atascaba" mi 'lector'.
Responder Con Cita
  #7  
Antiguo 10-04-2007
Isabel_AS Isabel_AS is offline
Registrado
 
Registrado: ene 2007
Posts: 9
Poder: 0
Isabel_AS Va por buen camino
Resulta que era de Basic 7.1, no de Clipper

Tengo varias novedades en mi "problema":

La primera es que he descubierto que la aplicación que generó los ficheros fue hecha en Basic 7.1 para MsDos y no en Clipper como creía.

Los ficheros no tienen ningún tipo de cabecera porque son escritos y leídos directamente por la aplicación origen, con lo que sí que había tomado el camino correcto al intentar leerlos con mi programa y no con otro externo (además, ya he encontrado el criterio de separación de los registros: el primer campo de cada registro es un número que tiene que coincidir con el número de posición dentro del fichero para que el registro sea válido).

Para terminar mi programa ya sólo me queda solucionar la lectura de los datos numéricos, que tiene tela...
He leído que Basic usa el formato MBF de Microsoft para almacenar sus tipos de datos numéricos (los simples, de 4 dígitos y los de doble precisión, que tienen 8) y no el estandar que se usa ahora de IEEE, con lo que necesito saber "leer" en ese formato y transformarlo para Delphi.

Me he bajado de Microsoft la dll MBF2IEEE.DLL que dice que tiene esas funciones de transformación, pero no se incorporarla y usarla desde mi programa.

¿Cómo puedo usar la dll desde mi programa? ¿Este sería el camino correcto?
Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Obtener un fichero adjunto a un nodo de un fichero XML muntasil Internet 0 18-07-2006 12:57:57
Delphi V.S. Clipper AGAG4 Varios 7 01-08-2005 21:39:31
Clipper en 3 Capas ???? AGAG4 Providers 3 30-06-2005 19:03:17
Analogia con Clipper JorgeBec Varios 4 12-06-2004 02:01:55
De clipper a Delphi... JorgeBec Varios 15 22-04-2004 23:05:19


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


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