Inicio > Código, Delphi, Ejemplos, Fácil > Cargar datos de un TXT a un TDataset (utilizando ADO) – Parte 2

Cargar datos de un TXT a un TDataset (utilizando ADO) – Parte 2

Share Button

Continuando con esta entrada (parte 1), nos queda ver como hacer algo similar, pero con un archivo de texto cuyos datos están separador utilizando algun caracter especial (TAB, coma, punto y coma,…)

Por defecto, para la lectura de un fichero de texto medianto ADO (Jet 4.0) se utiliza la información que hay en el registro de windows, que se considera la configuración por defecto. Esta configuración se encuentra en la clave:
‘\SOFTWARE\Microsoft\Jet\4.0\Engines\Text’

Dentro de HKEY_LOCAL_MACHINE y en el valor Format.

De todas formas, para tener un mayor control sobre el procesos para acceder a los datos del fichero de texto, es recomentable (altamente recomendable diría yo) crear un fichero de esquema.
El fichero de esquema siempre tienen el nombre schema.ini y se encuentra en la misma carperta del origen de datos. En el fichero de esquema se definen:

  • El formato del archivo.
  • El nombre, la longitud y el tipo de cada campo (columnas).
  • El juego de caractreres utilizado en el archivo de datos.
  • Conversiones especiales para los tipos de datos.

Si tuviéramos un archivo similar a este (aunque aquí he utilizado para el ejemplo el separador ‘‘ que no parace muy adecuado):

Sierra eléctrica-1-250
Machete-5-2.70
Detergente-1-10
Delantal-2-7.25
Afilador-3-5
Cortacesped-6-95
Televisor plasma-2-200
Caja clavos-4-12
Ordenador-1-300
Caja lápices-2-11
Paquete folios-1-10

En nuestro archivo schema.ini debemos añadir lo siguiente para conseguir un acceso correcto a los datos:

  • Format=Delimited(-); Para definir nuestro separador de campos
  • ColNameHeader=False;  Puesto que no están definidas dentro del archivo de texto los títulos de las columnas.
  • A continuación nombres y tipos de las columnas.
  • CharacterSet=ANSI; Para definir la codificación del texto.
  • MaxScanRows=0; Define cuantas líneas escanea el motor para determinar el tipo de datos de cada columna. 0 para todas.

Finalmente nuestro archivo de esquema quedará de compleatado de la siguiente manera:

 [Datos.txt]
Format=Delimited(-)
ColNameHeader=False
Col1=Producto char
Col2=Cantidad Integer 
Col3="Precio Total" currency 
MaxScanRows=0
CharacterSet=ANSI

El ejemplo completo para acceder a los datos de un TXT utilizando las opciones del Registro de Windows, se pueden descargar desde aquí.
<Descargar ejemplo>

El ejemplo completo para acceder a los datos de un TXT utilizando las opciones de un archivo de esquema schema.ini, se pueden descargar desde aquí.
<Descargar ejemplo>

Vota este post
Subscribe
Notify of
guest

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

19 Comments
Inline Feedbacks
Ver todos los comentarios
Nasedo
Nasedo
15 years ago

Hola Neftalí, necesito saber como arrastrar un documento X al un grid y sólo me de la direccón en donde se encuentra en el Campo deseado..

ejemplo yo tengo algunos documentos pdf en c:\Datos\… deseo arrastrar 4 de ellos y soltarlos sobre el DBgrid (enlazado a una Mamtable) y me de su ubicacion en el campo direccion osea seria c:\datos\doc.pdf …etc… tienes alguna idea como lograr eso?? me puedes orientar!! gracias!!
P.D. excelente página!!

cecidvs
cecidvs
14 years ago

Estimado Neftali, a traves de club delphi te hice una consulta para exportar excel a delphi, pero con este ejemplo de tu pagina pude hacerlo a traves de un txt, muchas gracias por tu constante aporte a mi aprendizaje.

walter aguero
14 years ago

Tengo problemas para abrir un excel mediante una conexión ADO utilizando sql, el archivo lo puedo abrir como tabla directa pero no como sql, podrias ayudarme, gracias

lupis
lupis
13 years ago

hola,como puedo leer un archivo de texto separado por tabuladores y mostrarlo en php

Wbarrantes
Wbarrantes
13 years ago

como hiciera para ver los tipos de valores que me aguantaria este fichero Schema…

digo podria poner campos tipo boolean? o bits? talvez… eso por dar un ejemplo

Wbarrantes
Wbarrantes
13 years ago

@Germán Estévez

Muchas gracias Neftali… una pregunta mas… en tu ejemplo si quisiera agragar un boton para buscar elarchivo especificandolo yo,(en ves de ser el archivo contenido dentro de la misma carpeta con el nombre Datos.txt, acceder un archivo el que sea por medio de un open dialog)…

estoy provando de esta manera…

//**********************************************
OpenDialog1.Filter:=’Datos (*.txt)|*.txt’;
if OpenDialog1.Execute then
begin
if OpenDialog1.FileName emptystr then
begin

ADOTable1.Active := False;
ADOTable1.TableName:= OpenDialog1.FileName;
ADOTable1.Active := True;

showmessage(‘llego bien’);

end;
end;

//**********************************************

pero solo lo carga correctamente cuando utilizo un archivo que este dentro de la misma carpeta y con el nombre DATOS.txt…

Wbarrantes
Wbarrantes
13 years ago

@Wbarrantes
Resuelto…
apunto el codigo por aquello de que a alguien mas le sirva…
var
TSTR_Archivo:tstringlist;
begin
TSTR_Archivo:= tstringlist.Create;
//****************************************
OpenDialog1.Filter:=’Datos (*.txt)|*.txt’;
if OpenDialog1.Execute then
begin
if OpenDialog1.FileName emptystr then
begin
STR_FILE_NAME := OpenDialog1.FileName;
//abro el schema, lo modifico con el nombre del archivo y lo guardo
TSTR_Archivo.LoadFromFile(GetCurrentDir + ‘\Schema.ini’);
TSTR_Archivo[0] := ‘[‘+ExtractFileName(OpenDialog1.FileName)+’]’ ;
TSTR_Archivo.SaveToFile(GetCurrentDir + ‘\Schema.ini’);

// asigno el nombre del archivo a la conexion
ADOTable1.Active := False;
ADOTable1.TableName:= STR_FILE_NAME ;
ADOTable1.Active := True;

showmessage(‘llego bien’);
end;
end;

Wbarrantes
Wbarrantes
13 years ago

ahora probando la aplicacion de este ejmplo con un archivo que tengo que cargar, me genera un error(carga los titulos de las columnas pero sin ningun valor, osea en blanco), pero si copio el contenido del archivo en el archivo datos.txt original… no me da problema alguno…

tiendo a creer que el problema podria venir por el lado del ANSI, pero en lugar del ansi que valores puedo poner (digo por ejemplo UTF8 o UTF-8, ya probe ambos pero me da «error no esperado»)…

agradesco la ayuda al respecto…

Wbarrantes
Wbarrantes
13 years ago

ya me funciono con UNICODE… en todo caso si me quedo la duda de los UTFs

sergio
sergio
12 years ago

hola, un link para bajar la librerias faltantes porfavor ?
mesale esto y no encue entro las librerias faltante gracias

[Pascal Fatal Error] Unit1.pas(7): F1026 File not found: ‘ADODB.dcu’

sergio
sergio
12 years ago

gracias (^_^)

bueno entonces tengo delphi 10 pero alparecer le hacen falta complementos en Data Acces, donde nadamas tengo «Datasource».
Ademas que todos los ejemplos usan el TQuery del DataAccess. hay una version y cual tenga todo para trabajar bien con BD o unlink para bajar e intalarlos complementos faltantes del Data acces en Delphi 10

19
0
Would love your thoughts, please comment.x
()
x