FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
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. |
#2
|
|||
|
|||
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. |
#3
|
||||
|
||||
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 - |
#4
|
|||
|
|||
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!! |
#5
|
||||
|
||||
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|| |
#6
|
|||
|
|||
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'. |
#7
|
|||
|
|||
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. |
|
|
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 |
|