Ler Arquivo Txt numa rede

01/10/2004

0

Bom dia...

tenho um programa que fica lendo arquivos txt numa rede netware. Bem, essa rede não é muito segura (o netware vive caindo).

Então bolei um jeito de remapear o netware(estou no linux) a cada vez que um problema como este é detectado, contudo, outro
problema que estou tendo agora é quando a rede cai no meio do processamento de um txt, ou seja, ele lei a origem, ta tudo bem com a origem e, quanto comeca a processar o arquivo txt a rede cai bem no meio. Isso tem ocorrido em media a cada 2 ou 3 dias
e me causado alguns problemas.
Entao pensei em mudar a forma de tratar a leitura do arquivo, passei a usar TStringList dando um loadfromfile no dito-cujo.

Qual era a minha idéia? Uma vez encontrado o arquivo de origem(sinal que o netware ta lá, senao estiver lanco uma excessao
e o programa remapeia ele pra mim) carrego todo o conteúdo do arquivo para a memória, se a rede cair dai pra frente, vamos
dizer assim, nao to nem ae mais rs... .

Bom, deu certo até certo ponto. Uma vez encontrado o arquivo eu comeco a ler os dados dele. Fiz o seguinte teste... tirei
o cabo da rede e ele continuou rodando até o termino do arquivo... Maravilha né! Estou com todos os dados em memória! Só que
um outro problema apareceu... quando o arquivo termina de ser lido e a rede ainda esta fora do ar meu programa trava... é
como se ele estivesse tentando liberar os recursos que nao estao mais disponiveis em rede.

aqui esta o trecho do código, é bem simples.

procedure TForm1.Button3Click(Sender: TObject);
var
  arq:TextFile;
  i,contador:integer;
  linha:string;
  ts:TStringList;
begin
try
     ts:=TStringList.Create;
     ts.LoadFromFile(´/home/ricardo/dados.txt´);
     contador:=0;

      for i:=0 to ts.count-1 do
        begin
          linha:=ts.Strings[i];
          contador:=contador+1;
          edit1.Text:=inttostr(contador);
          Application.ProcessMessages;
        end;
          showmessage(´acabou: ´ + inttostr(contador));
finally
     FreeAndNil(ts);
end;

end;


é quando ele termina o FOR que ele trava. Nao chega nem a dar o showmessage.

Alguem tem alguma idéia?

valeu pessoal, um abracao.

Ricardo.


Rfpsatin

Rfpsatin

Responder

Posts

01/10/2004

Rômulo Barros

procedure TForm1.Button3Click(Sender: TObject);
var
:?: [b:6191debc1d][color=red:6191debc1d]//[/color:6191debc1d][/b:6191debc1d] arq:TextFile;
i,contador:integer;
linha:string;
:arrow: [b:6191debc1d][color=red:6191debc1d] ts:TStrings;[/color:6191debc1d][/b:6191debc1d]
begin
try
ts:=TStringList.Create;
ts.LoadFromFile(´/home/ricardo/dados.txt´);
contador:=0;

for i:=0 to ts.count-1 do
begin
linha:=ts.Strings[i];
contador:=contador+1;
edit1.Text:=inttostr(contador);
Application.ProcessMessages;
end;
showmessage(´acabou: ´ + inttostr(contador));
finally
FreeAndNil(ts);
end;

end;


Responder

01/10/2004

Rfpsatin

[quote:f35f12e7db=´Undeclared Identifier´]procedure TForm1.Button3Click(Sender: TObject);
var
:?: [b:f35f12e7db][color=red:f35f12e7db]//[/color:f35f12e7db][/b:f35f12e7db] arq:TextFile;
i,contador:integer;
linha:string;
:arrow: [b:f35f12e7db][color=red:f35f12e7db] ts:TStrings;[/color:f35f12e7db][/b:f35f12e7db]
begin
try
ts:=TStringList.Create;
ts.LoadFromFile(´/home/ricardo/dados.txt´);
contador:=0;

for i:=0 to ts.count-1 do
begin
linha:=ts.Strings[i];
contador:=contador+1;
edit1.Text:=inttostr(contador);
Application.ProcessMessages;
end;
showmessage(´acabou: ´ + inttostr(contador));
finally
FreeAndNil(ts);
end;

end;[/quote:f35f12e7db]


Salve, vou testar agora esse teu codigo, codigo, uma ressalta.

Mandei o mesmo fonte para o Delphi7 no windows e lá funcionou como esperava. Ou seja, ta com cara que é mais um dos BUGs do Kylix (to usando o 3).

Vou testar e dou um retorno.


Responder

01/10/2004

Rfpsatin

mesma coisa...

kylix eh um ´quebra-perna´!


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar