Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Importa y Exportar (https://www.clubdelphi.com/foros/showthread.php?t=20975)

Ulises 03-05-2005 03:03:23

Importa y Exportar
 
Hola,

Estoy creando una tabla externa desde firebird, pero me trae caracteres extraños, en concreto son dos caracteres del final de las lineas, trate de sacarlas agregando un campo mas a mi tabla de largo 2, pero aun asi no me resulta, expongo a continuacion mas detalles:

Comando para creat tabla externa

create table tablaex external ´c:\paso.txt´
(
campo01 char(4),
campo02 char(4),
campo03 char(4),
campo04 char(2)
)

El archivo de texto tiene la siguiente informacion:

100020003000
400050006000

Cuando ejecuto el comando, la tabla queda con la siguiente informacion:

1000 2000 3000
||40 0050 0060

Cualquier ayuda sera bienvenida, de antemano gracias.

Ulises

fly 03-05-2005 04:05:29

Los caracteres son del retorno de carro del fichero TXT, creo que son chr(13)+chr(10)

Yo para leer desde ficheros de texto lo que hago es leerlo con ReadLn ( o leerlo con Read y despreciar los ultimos 2 caracteres). Si necesito meter todo el fichero en la BBDD leo los registros uno a uno.

O si sólo lo necesitas hacer una vez lo puedes habrir desde Excel, darle el formato adecuado (ancho de cada campo) y guardarlo con formato DBase. Una vez como DBF es fácil de leer.

Saludos.

Ulises 03-05-2005 15:05:36

Importar y Exportar
 
Gracias por tu respuesta,

Exactamente como tu dices esos caracteres corresponden al salto de linea, ahora bien con un readln efectivamente lo podria saltar, pero lo que yo estoy haciendo es que la base me lea directamente el archivo txt mediante un sp, o sea sin utilizar delphi.

Como podras apreciar no me serviria el readln pues el SQL no tiene esa instrucción, gracias de todas maneras.

Ulises

rastafarey 03-05-2005 17:58:09

Resp
 
Usas las funciones trim o ltrim.

Si no estan disponibles es las udf extras estan.

Ulises 03-05-2005 18:39:21

Gracias por tu respuesta,

En realidad cuando tu ejecutas el comando
Código:

create table
el firebird te trae en forma automatica lo que existe en el archivo de texto, no veo donde podria colocar la udf trim o similar dentro del comando.

Slds

Ulises

rastafarey 03-05-2005 19:02:32

Resp
 
Mira las funciones las puede usar con una simple intrucion sql para actualizar cada registro con un trim de lso campos.

Esto es para que elimines los caracteres de esapcio.

Bueno esto es una solucion Quisas no la que esperabas.

Ulises 03-05-2005 22:59:32

Entiendo tu respuesto y al mismo tiempo no, para graficar te muestro el codigo que trae en forma inmediata los datos que estan en el archivo de texto a la tabla que se crea mediante el comando:

Código:

create table archivoext external file 'c:\paso.txt'
(
te_campo01 char(04),
te_campo02 char(04),
te_campo03 char(04),
te_campo04 char(04),
te_campo05 char(04),
te_campo06 char(04),
retorno    char(02)
);

a lo mejor no te entiendo pero donde segun tu iria el ltrim o en su defecto otro similar, te recuerdo que solamente la idea es hacer esta instrucción.

Gracias de nuevo

ulises

fly 05-05-2005 01:24:23

Sigo sin respuesta para tu duda, pero he hecho algunas pruebas y con interbase 6.5 el create me coje bien los datos (en campo04 pone los dos caracteres || ).

No supe hacer el Stored Procedure, pero creando la tabla directamente todo fue bien.

Sin embargo con firebird 1.5 no consegui resultado alguno, al crear la BBDD ya me daba el error :
Código:


Please retry, specifying an option
Statement: create table tablaex external file 'c:\paso.txt'

y la tabla tablaex no era creada.

Bueno, espero que esto te sirva de algo. Prueba con Interbase y si te funciona busca en los bugs de Firebird.

Cuando tenga tiempo seguiré con este tema porque, si funciona, me viene bien para un programa, me parece mejor opción que leer el fichero de texto.

Saludos.

Ulises 05-05-2005 15:17:55

Gracias Fly por tu respuesta,

con respecto a pq no creo la tabla puede ser por la configuracion del server, tienes que ir a firebird.conf o interbase.conf (no se si será asi) y ver los parametros del acceso a tablas externas que generalmente esta denegado y ademas con comentario, para mayor explicacion te copio parte del archivo:

Código:

# ----------------------------
# External File Paths/Directories
#
# ExternalFileAccess may be None, Full or Restrict. If you choose
# Restrict, provide ';'-separated trees list, where external files
# are stored. Relative paths are treated relative to RootDirectory entry
# (see above). Default value 'None' disables any use of external files
# on your site. To specify access to specific trees, enum all required
# paths (for Win32 this may be something like 'C:\ExternalTables',
# for unix - '/db/extern;/mnt/extern').
#
# NOTE: THE EXTERNAL TABLE ENGINE FEATURE COULD BE USED TO COMPROMISE
# THE SERVER/HOST AS WELL AS DATABASE SECURITY!!
#
# IT IS STRONGLY RECOMMENDED THAT THIS SETTING BE USED TO LIMIT
# EXTERNAL TABLE LOCATIONS!
#
# Type: string (special format)
#
ExternalFileAccess = Restrict c:\

a lo mejor con esto te funciona, y con respecto a lo que dices de que es una buena herramienta comparto contigo la misma opinion por eso estoy tan interesado en ello.

Si alguien me pudiera ayudar a mi en firebird seria super bueno....

Gracias

Ulises

orodriguezc 06-05-2005 03:28:59

Hola ulises,


Hice la prueba con Firebird 1.5 y funcionó perfectamente. La siguiente es la estructura que utilice para la prueba:

Código:

CREATE TABLE TABLAEXTERNA EXTERNAL 'C:\TABLAEXTERNA.TXT' (
    CAMPO1  CHAR(4),
    CAMPO2  CHAR(4),
    CAMPO3  CHAR(4),
    CR      CHAR(2)
)

Pienso que debes verificar que tu archivo externo tenga exactamente la cantidad de caracteres por línea que crees que tiene. Algunos editores no son capaces de visualizar ciertos caracteres y eso puede causar confusión.

Saludos.

Ulises 06-05-2005 16:37:37

Gracias por tu respuesta,


Me podrias indicar con que editor hiciste la prueba, en realidad yo he probado con varios, tal como el notepad, ultraedit, edit.

En realidad es bastante util el trabajar de esta manera pues te evitas un monton de pasos que segun lo que he visto se hacen en delphi ahora, pero a veces es mas conveniente que los haga la base, y se tiene la oportunidad de exportar directamente desde la base a un archivo de texto tambien.

Gracias de nuevo

Ulises

orodriguezc 06-05-2005 19:17:01

Con el editor de delphi
 
Hola ulises,

La prueba la hice tanto con el editor de Delphi 5 como con el Edit.com, obteniendo buenos resultados. El notepad también podría funcionar, pero he tenido malas experiencias con él en otras ocasiones y por eso no lo uso para editar ete tipo de archivo.


Saludos.

fly 06-05-2005 19:21:44

Exacto Ulises, no tenia nada configurado en ExternalFileAccess.

Lo he activado y ahora si va, y funciona perfectamente y la extructura es la misma que usó orodriguezc, la única pega es que no pilla la última línea si no existe al final de ella el retorno de carro.

Pero coge bien los cuatro campos ( 3 + retorno_de_carro)

Los caracteres de fin de linea son 0Dh+0Ah (osea 13+10 en decimal)

En cuanto a editores, usa uno hexadecimal, por ejemplo el WinHex.

Saludos.

Ulises 08-05-2005 03:18:42

Gracias por tu orientación,

exactamente habia creado mi archivo con notepad e insistia en usar el mismo archivo, lo cree con el edit.com y funciona a la perfecion, ojala esto sirva para muchos del foro.

Gracias a todos de nuevo

Ulises.


La franja horaria es GMT +2. Ahora son las 00:19:03.

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