Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Leer campos de un archivo de texto. (https://www.clubdelphi.com/foros/showthread.php?t=76381)

Ledian_Fdez 27-10-2011 15:10:54

Leer campos de un archivo de texto.
 
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:

Código SQL [-]
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)
Cargar datos de un TXT a un TDataset (utilizando ADO) – Parte 2

ecfisa 27-10-2011 16:14:44

Hola Ledian_Fdez.

Otra opción:
Código Delphi [-]
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:
Código Delphi [-]
   DataSet.FieldByName('Codigo').AsString:= TS[1];
   ...
   DataSet.FieldByName('Email').AsString:= TS[5];


Un saludo.

escafandra 31-10-2011 14:43:40

Escribí por error.


La franja horaria es GMT +2. Ahora son las 19:32:52.

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