Ler Arquivo Txt numa rede

01/10/2004

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&93;;
          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

Respostas

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 Citar

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 Citar

01/10/2004

Rfpsatin

mesma coisa...

kylix eh um ´quebra-perna´!


Responder Citar