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.
é 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.
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
Curtir tópico
+ 0
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;
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.
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
Clique aqui para fazer login e interagir na Comunidade :)