Delphi - Leer un archivo .txt

 
Vista:

Leer un archivo .txt

Publicado por Antonio (1 intervención) el 18/12/2007 23:30:22
Cada línea del archivo .txt es diferente.
Cada campo está separado por punto coma (;). Los campos son de largo variable.
Necesito dejar en una variable cada campo ya que luego lo voy a insertar en una tabla de una Base de Datos SQL Server.

IMP20983;0;IMP20983
VK RF SE1052 SO M;9008;60490001070

Dejar en una variable cada campo separado por ;
es un archivo .txt y los campos son variables. Leo el archivo y lo traspaso a un Memo.
if OpenDialog1.Execute then
begin
AssignFile(F, OpenDialog1.FileName);
Reset(F);
while not eof(F) do
begin
Readln(F, S);
Memo.Lines.Add(S);
end;
CloseFile(F);
end;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 65
Oro
Ha mantenido su posición en Delphi (en relación al último mes)
Gráfica de Delphi

RE:Leer un archivo .txt

Publicado por E.T. (1244 intervenciones) el 19/12/2007 02:34:21
Con el siguiente código puedes cargar las lineas del archivo en una variable llamada "valores" de tipo array of string, además de que los campos tambien te los separa, para ejecutarlo necesitas en tu form un memo, dos edit, y tres botones (no modifiques el nombre de ninguno de los componentes hasta que lo pruebes)

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Memo1: TMemo;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
valores:array of array of string;// en esta variable se guardan los valoresde cada linea
//separados por campos
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

{NOTA:
el codigo de este botón crea un archivo de muestra que se carga en el memo, hay que presionar este botón primero}

procedure TForm1.Button1Click(Sender: TObject);
var archivo:textfile;
i,j:integer;
cadenas:array[0..9] of string;
begin
cadenas[0]:='palabra0';
cadenas[1]:='palabra1';
cadenas[2]:='palabra2';
cadenas[3]:='palabra3';
cadenas[4]:='palabra4';
cadenas[5]:='palabra5';
cadenas[6]:='palabra6';
cadenas[7]:='palabra7';
cadenas[8]:='palabra8';
cadenas[9]:='palabra9';
randomize;
assignFile(archivo,'c:entrada.txt');
rewrite(archivo);
for i:=1 to 400 do begin
for j:=1 to 10 do begin
write(archivo,cadenas[random(9)]);
write(archivo,';');
end;
writeln(archivo,'');
end;
closefile(archivo);
memo1.Lines.Clear;
Memo1.Lines.LoadFromFile('c:entrada.txt');
end;

{NOTA:
se carga el archivo, si es que existe, al activarse la forma, puedes usar esto en lugar del codigo que tu pones para ahorrarte lineas}

procedure TForm1.FormActivate(Sender: TObject);
begin
if fileexists('c:entrada.txt')then
Memo1.Lines.LoadFromFile('c:entrada.txt');
end;

{NOTA:
Este código carga el contenido del archivo en la variable "valores", hay que presionar este botón despúes de presionar el anterior, para que esto funcione tambien debe haber un punto y coma al final de cada linea, como el que yo hago de muestra}

procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
cadena,cadena2:string;
begin
SetLength(valores,0);
for i:=0 to Memo1.Lines.Count-1 do begin
SetLength(valores,length(valores)+1);
cadena:=Memo1.Lines[i];
cadena2:='';
for j:=1 to length(cadena) do begin
if cadena[j]<>';' then
cadena2:=cadena2+cadena[j]
else begin
SetLength(valores[length(valores)-1],length(valores[length(valores)-1])+1);
valores[length(valores)-1,length(valores[length(valores)-1])-1]:=cadena2;
cadena2:='';
end;
end;
end;
ShowMessage('Carga del archivo completada');
end;

{NOTA:
Ahora, pon un número en el edit1 que esté entre 0 y 399, y en el edit2 de 0 a9, y se mostrará el valor que tenga valores[x,y] donde x es lo que hay en edit 1 y y el edit 2
}

procedure TForm1.Button3Click(Sender: TObject);
begin
ShowMessage(valores[strtoint(Edit1.Text),strtoint(Edit2.Text)]);
end;

end.

Ahora, lo que tu debes hacer es un doble ciclo, para llenar tu tabla, de la siguiente manera:

Valores[renglon, columna]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Leer un archivo .txt

Publicado por la mamaguevaso (1 intervención) el 20/02/2010 02:01:50
cara de totos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar