GARANTIR DESCONTO

Fórum Evitar Gravar em arquivo txt loop infinito #297491

28/09/2005

0

Beleza.. Estou fazendo manutenção em um programa ... Isto ja é muito ruim. Mas esse programa tem uma estrutura onde se tem uma laço While .. Acontece que Dentro desse laço se grava informaçoes em um arquivo texto.. Gostaria de me precaver , para que se o programa for processar , evitar de algum modo , se o programa entrar nun loop infinito , que nada seje gravado nesse arquivo ,

A Estrutura esta mais ou menos assim :

While <condicao > do
Gravar No Arquivo Texto


queria me proteger , caso ocorrra um loop infinito , esse arquivo txt nada sofresse..

Obrigado...


Marco Salles

Marco Salles

Responder

Posts

28/09/2005

Massuda

Marco

Acho que qualquer medida eficiente para evitar loop infinito neste caso irá depender de como funciona o programa. Poderia sugerir usar um contador, um temporizador, etc mas isso depende de o que está sendo escrito e em que condições o programa fica em loop. Moral da estória: seria melhor você detalhar mais o problema.


Responder

Gostei + 0

28/09/2005

Motta

[quote
queria me proteger , caso ocorrra um loop infinito , esse arquivo txt nada sofresse..
...


Não entendi , a defesa está em não deixar entrar em loop.
Faça uma checagem das condições antes de entrar.
Um aplicação só entra em loop infinito se vc errar o código , ou fixer de propósito ...

Loop´s infinitos , ainda mais com gravação de arquivos acabam num erro de stack overflow.


Responder

Gostei + 0

28/09/2005

Marioguedes

Sugiro o seguinte codigo:

var
linha : Integer;
begin
(...)
linha := 0;
while (condicao) do
  begin
  Gravar....
  if linha = 1000
    then Break //Aqui está a dica em si
    else Inc(linha);
  end;
(...)
end;



Responder

Gostei + 0

28/09/2005

Marco Salles

Beleza massuda
Acho que qualquer medida eficiente para evitar loop infinito neste caso irá depender de como funciona o programa.


Mas como disse antes o programa não é meu...
:cry: :cry: :cry:
Existem muitas situaçoes que a gente protege um Bloco com try except finally... :idea: :idea: Pensei que poderia existir algo que ao perceber o loop Infinito , evitasse que o processo de gravação

Não entendi , a defesa está em não deixar entrar em loop. Faça uma checagem das condições antes de entrar. Um aplicação só entra em loop infinito se vc errar o código , ou fixer de propósito ... Loop´s infinitos , ainda mais com gravação de arquivos acabam num erro de stack overflow.


Aproveitandando esta linha de raciocineo , tem como retornar o arquivo , no estado inicial , Depois que esse erro fora capturado pelo bolco try excepet..

var linha : Integer; begin (...) linha := 0; while (condicao) do begin Gravar.... if linha = 1000 then Break //Aqui está a dica em si else Inc(linha); end; (...) end;


Este código , parece que , evitaria o Loop infinito , mas em compensação , mil coisas seriam gravadas desnecessárias ou repetidas no arquivo Txt

Obrigado a todos e no aguardo de mais sugestoes.


Responder

Gostei + 0

28/09/2005

Massuda

[quote:5cd2aed379=´Marco Salles´]Este código , parece que , evitaria o Loop infinito , mas em compensação , mil coisas seriam gravadas desnecessárias ou repetidas no arquivo Txt[/quote:5cd2aed379]Poderia acontecer de, numa situação de funcionamento normal, o loop ter de ser executado 1001 vezes... nesse caso, não estaria evitando um loop infinito, mas sim introduzindo um erro no resultado.

Como disse antes, precisaria de mais informação... no mínimo, qual a condição do loop.


Responder

Gostei + 0

29/09/2005

Michelli88

Porque vc nao faz um tipo de um backup?
Se entrar no loop vc pega o arquivo backup e substitui o outro para q fique como antes. :oops:


Responder

Gostei + 0

29/09/2005

Macario

Olá programador.

Conforme dito, poste a estrutura do while, pois ficaria mais facil de entender.


Agora o que voce poderia estar fazendo é, mandar os dados para uma StringList e depois caso o while tenha sucesso, voce gravaria a StringList;

Essa é minha sugestão.

:roll:


Responder

Gostei + 0

29/09/2005

Marco Salles

[b:ab4a64d4ce]Obrigado a todos que participam dese tópico[/b:ab4a64d4ce]

[b:ab4a64d4ce]A Questão aqui é um pouco teorica... [/b:ab4a64d4ce]

citacao de Mota
Não entendi , a defesa está em não deixar entrar em loop. Faça uma checagem das condições antes de entrar. Um aplicação só entra em loop infinito se vc errar o código , ou fixer de propósito ...


Vamos supor que se ebtre no loop de forma proposital ...

A Pergunta é :

[b:ab4a64d4ce]A Alguma forma de sair desse loop infinito , restaurar o arquivo Original[/b:ab4a64d4ce]

Queria saber se tem jeito via programaçao fazer o que a michelli sugeriu:

Porque vc nao faz um tipo de um backup? Se entrar no loop vc pega o arquivo backup e substitui o outro para q fique como antes.



Responder

Gostei + 0

30/09/2005

Marco Salles

Sera que não da para fazer este Tratamento ???? O Delphi não gera nenhuma mensagem interna , para que possamos trata-la ????

:cry: :cry: :cry: :cry:


Responder

Gostei + 0

30/09/2005

Siam

Msg de looping ?
Quando vc faz: While 1 = 1 do ;
O Delphi compila, entra em looping infinito e não dá nenhuma mensagem.


Responder

Gostei + 0

01/10/2005

Marco Salles

Msg de looping ? Quando vc faz: While 1 = 1 do ; O Delphi compila, entra em looping infinito e não dá nenhuma mensagem.


Certeza disso :!: :!: :!:


Responder

Gostei + 0

01/10/2005

Beppe

Oi.

[quote:2a16086ead=´Marco Salles´]Existem muitas situaçoes que a gente protege um Bloco com try except finally... :idea: :idea: Pensei que poderia existir algo que ao perceber o loop Infinito[/quote:2a16086ead]
Loop infinito é apenas um jargão, técnicamente são apenas um pulo para o mesmo lugar, e o delphi não monitora a execução do programa.
[quote:2a16086ead=´Marco Salles´]evitasse que o processo de gravação[/quote:2a16086ead]
A sugestão da michelli88 é a que mais se aproxima de processamento de transações no sistema de arquivos.

[quote:2a16086ead=´Marco Salles´]
Porque vc nao faz um tipo de um backup? Se entrar no loop vc pega o arquivo backup e substitui o outro para q fique como antes.
[/quote:2a16086ead]

[quote:2a16086ead=´Marco Salles´]Sera que não da para fazer este Tratamento ???? O Delphi não gera nenhuma mensagem interna , para que possamos trata-la ????[/quote:2a16086ead]
É erro de lógica, então o Delphi não dá bola. Faça o loop finito. Se sua pergunta é sair do loop, a resposta é Break.


Responder

Gostei + 0

01/10/2005

Marco Salles

Citação de beppe
É erro de lógica, então o Delphi não dá bola.


Entendido.. Mas suponha que em cada while , o arquivo txt seje carregado... Ira chegar uma hora que ele não suporta mais a inclusão de dados.. Não existe , nenhuma mensagem do windows ou do delphi que se possa tratar neste caso , para ai sim , fazer o que a michelli sugeriu

Citação de beppe
Se sua pergunta é sair do loop, a resposta é Break.


Porque eu nun to entendendo... Como eu vou dar um Break ???

Ou colocando um parametro , como foi comentado sugerido pelo amigo marioguedes , mas ai nesse caso incorre na sugestão do massuda

citacao de massuda
Poderia acontecer de, numa situação de funcionamento normal, o loop ter de ser executado 1001 vezes... nesse caso, não estaria evitando um loop infinito, mas sim introduzindo um erro no resultado.


Eu gostaria de dar um Break , na situção de um erro ... Se não dar para definir , um loop infinito , sera que daria para pelo menos defiir um Arquivo Txt com capacidade esgotada < Digamos assim > e neste caso gerar um Erro :?: :?: :?:


Responder

Gostei + 0

01/10/2005

Beppe

[quote:d003c9456f=´Marco Salles´]Ira chegar uma hora que ele não suporta mais a inclusão de dados.. [/quote:d003c9456f]
Até que o HD esgotar? :shock:


Responder

Gostei + 0

01/10/2005

Marco Salles

Marco Salles escreveu: Ira chegar uma hora que ele não suporta mais a inclusão de dados.. [quote:c029735b44]Até que o HD esgotar?
[/quote:c029735b44]

Se não me engano , o txt , tem capacidade limitada . Bem menor do que o Hd


Responder

Gostei + 0

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

Aceitar