Delphi ñ Detecta Repeat e nem while

Delphi

17/11/2004

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

Luisandro

Curtidas 0

Respostas

Massuda

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).


GOSTEI 0
Massuda

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

Luisandro

17/11/2004

Valeu Vou tentar fazer isso.


GOSTEI 0
Luisandro

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

Massuda

17/11/2004

Você poderia postar aqui um trecho do código que dá problema?


GOSTEI 0
Luisandro

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

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

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

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

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...


GOSTEI 0
Massuda

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.


GOSTEI 0
Sandra

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.


GOSTEI 0
Luisandro

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.


GOSTEI 0
Massuda

Massuda

17/11/2004

Minha última tentativa...

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

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
POSTAR