PDA

Ver la Versión Completa : Leer campos de un archivo de texto.


Ledian_Fdez
27-10-2011, 15:10:54
Hola
Tengo un archivo de texto que lo genera un sistema y con esa información tengo que actualizar unas tablas en SQL Server 2000 la cual la usan otro sistema, es algo asi como que el archivo de texto es el enlace entre los dos sistemas. El archivo tiene la siguiente estructura:

codigo|nombre|carnet|direccion|email

0001|Maria Isabel|78040405328|mexico, df|maria@company.mx
0111|Alberto Pajal|78040405328|argentina|alberto@gmail.com
4564|Gerald Tons|78040405328| |
0855|Gina Pajal|78040405328|mexico, df|gina@yahoo.com
9874|Clara Picante|78040405328|mexico, df|clara@yupy.com

Necesito saber cómo leer campo a campo (delimitados por el palo vertical | ) en el archivo para luego con esa información poder actualizar las tablas.

Noten que en ocasiones hay campos que no presentan información lo cual se traduce en la tabla que el campo es null.

Como siempre, mil grasias de antemano y en espera de su respuestas un delphino.

joni88
27-10-2011, 15:23:30
Hay una instrucción que se llama BULK INSERT que te permite hacer eso:


BULK INSERT tabla
FROM archivo
WITH
(
FIELDTERMINATOR = '|',
ROWTERMINATOR = '\n',
CODEPAGE = 'ACP'
)


Lo único, que hasta donde yo se solo vas a poder hacer el insert en una sola tabla, que tiene que tener solamente los campos de tu archivo: codigo, nombre, carnet, direccion, email

Neftali [Germán.Estévez]
27-10-2011, 15:57:06
Revisa estas dos entradas:

Cargar datos de un TXT a un TDataset (utilizando ADO) (http://neftali.clubdelphi.com/?p=418)
Cargar datos de un TXT a un TDataset (utilizando ADO) – Parte 2 (http://neftali.clubdelphi.com/?p=437)

ecfisa
27-10-2011, 16:14:44
Hola Ledian_Fdez.

Otra opción:

procedure TForm1.Button1Click(Sender: TObject);
var
F: TextFile;
TS: TStrings;
Linea: string;
i: Integer;
begin
AssignFile(F,'C:\TU_ARCHIVO.TXT'); // nombre del archivo .txt
Reset(F);
try
TS:= TStringList.Create;
try
while not Eof(F) do
begin
Readln(F, Linea);
if (Length(Linea)>0)and (Linea[1] in ['0'..'9']) then // los datos a pasar, empiezan con un número (codigo)
begin
TS.Clear;
ExtractStrings(['|'], [], PChar(Linea), TS);
DataSet.Append; // (o insert)
for i:= 0 to TS.Count-1 do
DataSet.Fields[i].AsString:= TS[i];
DataSet.Post;
end;
end;
finally
CloseFile(F);
end;
finally
TS.Free;
end;
end;

En el ejemplo supongo que los datos en archivo de texto tienen el mismo órden que en la tabla, de no ser así tendrías que ponerlos a mano:

DataSet.FieldByName('Codigo').AsString:= TS[1];
...
DataSet.FieldByName('Email').AsString:= TS[5];




Un saludo.

escafandra
31-10-2011, 14:43:40
Escribí por error.