Delphi ñ Detecta Repeat e nem while
Tudo bem pessoal, estou com um problema quanto tento debugar o código da minha aplicação em delphi, o delphi não detecta os while, repeat e nem o begin deles inclusive os begis dos if, simplesmente pula a linha do código onde eles estão, como posso resolver esse problema.
Luisandro
Curtidas 0
Respostas
Massuda
17/11/2004
Experimente dar um build (Project/Build) no seu aplicativo desabilitando a opção de otimização (Project/Options/Compiler/Code Generation/Optimization).
Se isso resolver, isso significa que o código que você queria executar passo-a-passo foi removido pela otimização do compilador. Por algum motivo o compilador decidiu que o código em questão não era necessário (tipo atribuir um valor a uma variável que nunca é utilizada).
Se isso resolver, isso significa que o código que você queria executar passo-a-passo foi removido pela otimização do compilador. Por algum motivo o compilador decidiu que o código em questão não era necessário (tipo atribuir um valor a uma variável que nunca é utilizada).
GOSTEI 0
Massuda
17/11/2004
Experimente dar um build (Project/Build) no seu aplicativo desabilitando a opção de otimização (Project/Options/Compiler/Code Generation/Optimization)....
Melhor ainda... antes disso, verifique se as opções de debug em Project/Options/Compiler/Debugging estão selecionadas.
GOSTEI 0
Luisandro
17/11/2004
Valeu Vou tentar fazer isso.
GOSTEI 0
Luisandro
17/11/2004
Não deu certo, Na hora de compilar o delphi não detecta os begin e end dos if e também não detecta os while e os begin e end, e nem os repeat simplesmente pula a linha do código onde estão, não sei como resolver isso.
GOSTEI 0
Massuda
17/11/2004
Você poderia postar aqui um trecho do código que dá problema?
GOSTEI 0
Luisandro
17/11/2004
Acredito que não tem na errado com o código mas aqui vai.
while fim=false do {Este while o delphi detecta
begin {Este Begin não detecta}
conta:=conta+1;
achei:=RichEdit1.Text[conta]+RichEdit1.Text[conta+1]+RichEdit1.Text[conta+2]+RichEdit1.Text[conta+3]+RichEdit1.Text[conta+4]+RichEdit1.Text[conta+5]+RichEdit1.Text[conta+6]+RichEdit1.Text[conta+7]+RichEdit1.Text[conta+8]+RichEdit1.Text[conta+9];
conta:=conta+10;
if achei=´Processual´ then
repeat {Esse repeat o delphi não pega mas o until de le sim}
achei:=RichEdit1.Text[conta]+RichEdit1.Text[conta+1]+RichEdit1.Text[conta+2]+RichEdit1.Text[conta+3]+RichEdit1.Text[conta+4]+RichEdit1.Text[conta+5]+RichEdit1.Text[conta+6]+RichEdit1.Text[conta+7]+RichEdit1.Text[conta+8]+RichEdit1.Text[conta+9];
Processo:=Processo+RichEdit1.Text[conta];
conta:=conta+1;
until achei=´Relator(a)´;
if achei=´Relator(a)´ then
repeat {Esse repeat o delphi não pega mas o until de le sim}
achei:=RichEdit1.Text[conta]+RichEdit1.Text[conta+1]+RichEdit1.Text[conta+2]+RichEdit1.Text[conta+3]+RichEdit1.Text[conta+4]+RichEdit1.Text[conta+5]+RichEdit1.Text[conta+6]+RichEdit1.Text[conta+7]+RichEdit1.Text[conta+8]+RichEdit1.Text[conta+9];
Relator:=Relator+RichEdit1.Text[conta];
conta:=conta+1;
fim:=true;
until achei=´Órgão´;GOSTEI 0
Massuda
17/11/2004
while fim=false do {Este while o delphi detecta}
begin {Este Begin não detecta}
{restante omitido}
Não sei se esta é uma explicação correta, mas aquele begin depois do while não é detectado porque ele, na prática, está embutido na mesma linha do while.
A propósito, eu consigo executar passo a passo o restante do código.
GOSTEI 0
Luisandro
17/11/2004
Apesar do begin do while não ser executado o while funciona bem, o problema é com os repeat que não são detectados e acaba dando erro quando chega na linha do until q esse sim é detectado
GOSTEI 0
Luisandro
17/11/2004
Apesar do begin do while não ser executado o while funciona bem, o problema é com os repeat que não são detectados e acaba dando erro quando chega na linha do until q esse sim é detectado
na instrução
repeat . . . until qualquer coisa=outra coisa;
Só Until é detectado no código o repeat não é detectado, o programa executa normalmente mas ao passar pelo until da erro na execução [/code]
GOSTEI 0
Aerreira
17/11/2004
1° - você está setando a variável FIM para false antes do while ?
2° - seu comentário na primeira linha ´{Este while o delphi...´ não está fechado com }
3° - não tem end; para o begin do while
De resto, sua rotina está um pouco confusa pois soma um na variável conta, depois pega 10 linhas, soma em conta, depois fica num loop somando 1 em conta e procurando por uma palavra, depois fica em outro loop somando 1 em conta, procurando por outra palavra, depois retorna e continua somando 1 em conta... Essa sua rotina está correta? Tem fim? E se não achar a palavra ´Relator(a)´ vai ficar em loop prá sempre...
2° - seu comentário na primeira linha ´{Este while o delphi...´ não está fechado com }
3° - não tem end; para o begin do while
De resto, sua rotina está um pouco confusa pois soma um na variável conta, depois pega 10 linhas, soma em conta, depois fica num loop somando 1 em conta e procurando por uma palavra, depois fica em outro loop somando 1 em conta, procurando por outra palavra, depois retorna e continua somando 1 em conta... Essa sua rotina está correta? Tem fim? E se não achar a palavra ´Relator(a)´ vai ficar em loop prá sempre...
GOSTEI 0
Massuda
17/11/2004
Depois de dar uma boa olhada no seu código e complementando o que o colega aerreira escreveu...
Seu código entra em loop infinito no último repeat porque você copia 10 caracteres para a string achei e testa se é igual a uma string com 5 caracteres.
Mesmo que você corrija isso (fácil :arrow: basta, no último repeat, copiar em achei apenas 5 caracteres ao invés de 10) seria recomendável revisar seu código.
Seu código entra em loop infinito no último repeat porque você copia 10 caracteres para a string achei e testa se é igual a uma string com 5 caracteres.
Mesmo que você corrija isso (fácil :arrow: basta, no último repeat, copiar em achei apenas 5 caracteres ao invés de 10) seria recomendável revisar seu código.
GOSTEI 0
Sandra
17/11/2004
Uma observação quanto a diferença de execução do ´while...do´ e ´repeat...until´.
[b:ad8da68d88]While...do[/b:ad8da68d88]: o teste é realizado no início desta instrução. Caso a expressão ´while´ (enquanto) seja verdadeira, os comandos a seguir serão executados. Consequentemente, caso seja falsa, não entrará no laço. Portanto, os comandos internos podem [b:ad8da68d88]ou não[/b:ad8da68d88] ser executados.
[b:ad8da68d88]Repeat...until[/b:ad8da68d88]: os comandos que estão dentro deste laço serão executados, independente da condição após o ´until´ ser verdadeira ou falsa. Após executar essas linhas, será feita a verificação. Caso seja verdadeira, será feita a repetição, caso contrário, não. Resumindo, estes comandos serão executados pelo menos uma vez.
Espero que ajude.
[b:ad8da68d88]While...do[/b:ad8da68d88]: o teste é realizado no início desta instrução. Caso a expressão ´while´ (enquanto) seja verdadeira, os comandos a seguir serão executados. Consequentemente, caso seja falsa, não entrará no laço. Portanto, os comandos internos podem [b:ad8da68d88]ou não[/b:ad8da68d88] ser executados.
[b:ad8da68d88]Repeat...until[/b:ad8da68d88]: os comandos que estão dentro deste laço serão executados, independente da condição após o ´until´ ser verdadeira ou falsa. Após executar essas linhas, será feita a verificação. Caso seja verdadeira, será feita a repetição, caso contrário, não. Resumindo, estes comandos serão executados pelo menos uma vez.
Espero que ajude.
GOSTEI 0
Luisandro
17/11/2004
O Codigo esta certo o loop do while tem fim, e a variavel FIM é atribuido o valor nela no evento oncreate do formulario, eu sei a diferença do while e do repeat, o problema não é a sintaxe do código o problema é o delphi não encontra o repeat é como se não tivesse escrito repeat no código,
o engraçado é que antes executava bem não fiz nenhuma modificação e derrepente parou de executar a instrução repeat na linha onde estava escrito.
Não sei mais o que fazer, vou começar o projeto do zero pra ver se resolve esse problema.
o engraçado é que antes executava bem não fiz nenhuma modificação e derrepente parou de executar a instrução repeat na linha onde estava escrito.
Não sei mais o que fazer, vou começar o projeto do zero pra ver se resolve esse problema.
GOSTEI 0
Massuda
17/11/2004
Minha última tentativa...
ou seja
senão o ´achei´ vai conter uma string com 10 caracteres o que nunca vai ser igual a ´Órgão´, que tem 5 caracteres.
no último repeat, copiar em achei apenas 5 caracteres ao invés de 10
ou seja
if achei=´Relator(a)´ then
repeat {Esse repeat o delphi não pega mas o until de le sim}
achei:=RichEdit1.Text[conta]+RichEdit1.Text[conta+1]+RichEdit1.Text[conta+2]+RichEdit1.Text[conta+3]+RichEdit1.Text[conta+4];
Relator:=Relator+RichEdit1.Text[conta];
conta:=conta+1;
fim:=true;
until achei=´Órgão´;
senão o ´achei´ vai conter uma string com 10 caracteres o que nunca vai ser igual a ´Órgão´, que tem 5 caracteres.
GOSTEI 0
Luisandro
17/11/2004
[b:61351d7726]Valeu Massuda, consegui resolver o problema, alguém tinha mudado as configurações do delphi por isso não estava executando bem, valeu pela ajuda.[/b:61351d7726] :D
GOSTEI 0