Fórum ler texto #325339

14/07/2006

0

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


Guigosnet

Guigosnet

Responder

Posts

14/07/2006

Paulo

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.


Responder

Gostei + 0

14/07/2006

Paullsoftware

uma unit de exemplo para vc adaptar as suas necessidades...
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:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar