ler texto
Gosta de saber como faço para ler da primeira linha do arquivo texto para a ultima linha
Estou tentando fazer isso While not Eof(Arq) Do
e da erro I/O 104
Estou tentando fazer isso While not Eof(Arq) Do
e da erro I/O 104
Guigosnet
Curtidas 0
Respostas
Paulo
14/07/2006
Antes de você fazer isso, deve primeiro abrir o arquivo, senão não funciona. E depois, deve dar um ReadLn, senão não funciona. Você abre o arquivo, dando um ASSIGNFILE(arq,qqqqqqq), depois um RESET e não REWRITE, pois REWRITE é para escrita.
GOSTEI 0
Paullsoftware
14/07/2006
uma unit de exemplo para vc adaptar as suas necessidades...
espero ter ajudado :wink:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, DBClient, StdCtrls, Grids, DBGrids;
type
TForm1 = class(TForm)
ClientDataSet1: TClientDataSet;
ClientDataSet1Codigo: TIntegerField;
ClientDataSet1descricao: TStringField;
DBGrid1: TDBGrid;
DataSource1: TDataSource;
Button1: TButton;
OpenDialog1: TOpenDialog;
ClientDataSet1Data: TDateField;
procedure FormCreate(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure GravarArquivoTexto(Diretorio, NomeArquivo : String; Query : TDataSet);
var
Texto : TextFile;
AuxText, AuxText2 : String;
sTemp : String;
iCont : Integer;
begin
AssignFile (Texto, Diretorio + NomeArquivo);
try
Reset(Texto);
Query.Append;
// Lê a primeira linha do txt
ReadLn(Texto, AuxText);
// copia o primeiro conteudo da linha ate o ;
AuxText2 := Copy(AuxText, 0, Pos(´;´, AuxText)-1);
// Adiciona o valor da variavel no Dataset (Banco)
Query.FieldByName(´Codigo´).AsInteger := StrToIntDef(AuxText2, 0);
// Pega a Qtde de Caracteres
iCont := Length(AuxText2);
// Guarda o restando do String
sTemp := Copy(AuxText, iCont+2, Length(AuxText));
// copia os dados do proximo campo
AuxText2 := Copy(sTemp, 0, Pos(´;´, sTemp)-1);
// Adiciona o valor da variavel no Dataset (Banco)
Query.FieldByName(´Descricao´).AsString := AuxText2;
// Pega a Qtde de Caracteres
iCont := iCont + Length(AuxText2);
// Guarda o restando do String
Inc(iCont);
sTemp := Copy(AuxText, iCont+2, Length(AuxText));
// se for o ultimo campo
AuxText2 := Copy(sTemp, 0, Length(sTemp)); // copia os dados do proximo campo
// caso contrario faça essa linha
// AuxText2 := Copy(sTemp, 0, Pos(´;´, sTemp)-1);
// Adiciona o valor da variavel no Dataset (Banco)
Query.FieldByName(´Data´).AsDateTime := StrToDate(AuxText2);
// Grava no DataSet
Query.Post;
while not Eof(Texto) do begin
Query.Append;
// Lê a proxima linha do txt
ReadLn(Texto, AuxText);
// copia o primeiro conteudo da linha ate o ;
AuxText2 := Copy(AuxText, 0, Pos(´;´, AuxText)-1);
// Adiciona o valor da variavel no Dataset (Banco)
Query.FieldByName(´Codigo´).AsInteger := StrToIntDef(AuxText2, 0);
// Pega a Qtde de Caracteres
iCont := Length(AuxText2);
// Guarda o restando do String
sTemp := Copy(AuxText, iCont+2, Length(AuxText));
// copia os dados do proximo campo
AuxText2 := Copy(sTemp, 0, Pos(´;´, sTemp)-1);
// Adiciona o valor da variavel no Dataset (Banco)
Query.FieldByName(´Descricao´).AsString := AuxText2;
// Pega a Qtde de Caracteres
iCont := iCont + Length(AuxText2);
// Guarda o restando do String
Inc(iCont);
sTemp := Copy(AuxText, iCont+2, Length(AuxText));
// se for o ultimo campo
AuxText2 := Copy(sTemp, 0, Length(sTemp)); // copia os dados do proximo campo
// caso contrario faça essa linha
// AuxText2 := Copy(sTemp, 0, Pos(´;´, sTemp)-1);
// Adiciona o valor da variavel no Dataset (Banco)
Query.FieldByName(´Data´).AsDateTime := StrToDate(AuxText2);
Query.Post;
end;
finally
CloseFile(Texto);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ClientDataSet1.CreateDataSet;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
sNomeFile,
sDir : String;
begin
OpenDialog1.Execute;
if not(Trim(OpenDialog1.FileName) = ´´) then
begin
try
// Pega o Diretorio do arquivo
sDir := ExtractFilePath(OpenDialog1.FileName);
// pega o nome do arquivo
sNomeFile := ExtractFileName(OpenDialog1.FileName);
// Manda gravar os dados do arquivo no TDataSet
GravarArquivoTexto(sDir, sNomeFile, ClientDataSet1);
except
on e : exception do
Begin
ShowMessage(e.Message);
raise;
end;
end;
end;
end;
end.espero ter ajudado :wink:
GOSTEI 0