IF com condição validando erroneamente

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

IF com condição validando erroneamente

Mensagem por microvolution »

Prezados Professores, bom dia!

No dia de hoje, estou com uma dúvida que é bem simples, mas, não tem dentes, e está me mordendo?! rsrsrs

Tenho o seguinte código num determinado local do meu aplicativo clipper (já convertido pra harbour HMG 3.0.35):

Código: Selecionar todos

     if .not. file ('C:\SISTEMA\xxxx.xxx') .or. .not. file ('D:\SISTEMA\XXXX.XXX') .or. .not. file ('C:\SISTEMA1\XXXX.XXX') .or. .not. file ('D:\SISTEMA1\XXXX.XXX')
          wait 'não achou então entrou'  // linha só pra teste da condição acima (se não encontrar tem que entrar aqui)
          if .not. file ('C:\SISTEMA\ZZZZ.xxx') .or. .not. file ('C:\SISTEMA1\ZZZZ.xxx') .or. .not. file ('D:\SISTEMA\ZZZZ.xxx') .or. .not. file ('D:\SISTEMA1\ZZZZ.xxx') 
          wait 'não achou zzzz.xxx nos caminhos acima' // linha acrescentada somente para entrar aqui se não achar o arquivo ZZZZ.XXX nos caminhos acima.
               mDIAS := ltrim(str(data_val-date()))
               if dtos(data_val) <= dtos(date())
                    inkey(0)
                    quit
               else
                    inkey(0)
               endif
          else
               wait 'estou no ELSE'  // linha acrescentada só pra verificar as datas.
               if file ('C:\SISTEMA\ZZZZ.xxx') 
                    use C:\SISTEMA\ZZZZ.xxx shar new
                    set index to C:\SISTEMA\ZZZZ.zzz
                    NM_EMPRESA   := NMEMPRESA
                    NOME_EMPRESA := NMEMPRESA
                    @ 1,2 clear to 7,78
                    @ 1,2 to 7,78
                    @ 2,3 say 'Empresa           : ' + NM_EMPRESA     color 'rb'
                    if data_val <= dtos(date())
                          inkey(0)
                          quit
                    else
                          inkey(0)
                    endif
         endif
     endif
Bom, vamos aos problemas:
1 - o arquivo XXXX.XXX realmente não existe em nenhum dos 4 caminhos procurados, portanto ele está entrando corretamente para dentro do 1º IF;
2 - já o arquivo ZZZZ.XXX está claramente presente no diretório 'C:\SISTEMA\'. Então essa condição, está entrando erroneamente para dentro desse 2º IF. Na verdade, deveria passar para dentro do ELSE e imprimir na tela a informação do wait 'estou no ELSE'.
3 - Outra coisa, se eu colocar qualquer um dos arquivos com o atributo "oculto" ele também não é encontrado.

Então, preciso sanar o problema 2 (acima) e também fazer com que o problema 3 (arquivo existe, mas, com atributo oculto) seja enxergado pelo clipper, pois, esse arquivo é de segurança e o usuário (leigo) não pode achá-lo com tanta facilidade.

Atenciosamente,
MICROVOLUTION
PS: estou curioso com alguma coisa: "observei que meu nível foi elevado de 1 para 2". Não sei se tem algum valor ou significado, mas, obrigado!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Como usar IF...ENDIF nos comandos GET e SAY?

Mensagem por alxsts »

Olá!

Em Clipper, os arquivos ocultos e de sistema não são "enxergados" pela função File(). Se você quer usar este recurso, precisará fazer um RUN Attrib -r-a-s-h antes de procurar/abrir o arquivo e depois RUN Attrib +r+a+s+h para esconder novamente.

Talvez seja isto que esteja dando problemas no teu código, que aparentemente está correto. Você diz que o arquivo existe mas, se existir com atributo -h (hidden ou oculto), o Clipper não conseguirá localizar. Teste e retorne.
microvolution escreveu:PS: estou curioso com alguma coisa: "observei que meu nível foi elevado de 1 para 2". Não sei se tem algum valor ou significado, mas, obrigado!
Este é um prêmio pela sua participação no fórum. Após 50 mensagens, o usuário é promovido ao Nivel 2 e assim sucessivamente.

No caso desta mensagem, você deveria ter aberto um novo tópico, para não cometer desvio de assunto. Observe que o título do post não tem relação com a tua dúvida.
[]´s
Alexandre Santos (AlxSts)
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como usar IF...ENDIF nos comandos GET e SAY?

Mensagem por microvolution »

Ok, meu prezado pela resposta tão hábil!

Quanto ao novo tópico pensei realmente nisso, só que achei que era algo dentro do mesmo assunto. Se quiser pode ter a liberdade de redirecionar para um novo tópico.

Quanto ao que escrevi, eu coloquei 3 observações, sendo que uma delas eu já sabia, que o arquivo em oculto não pode ser visto pelo clipper.

Bom, mas no meu caso principal, o arquivo existe e não está oculto e nem como leitura.

O código original estava diferente. Estava apenas com uma busca "c:\sistema\xxxx.xxx".
Aí para expandir a abrangência da pesquisa pelo arquivo em locais que for instalado é que mudei a condição do IF .NOT. FILE ... .OR. .NOT. FILE ... etc. etc...

Após essa mudança, parece que o IF não encontra o arquivo, sendo que ele está e com certeza não está OCULTO e nem SOMENTE LEITURA.

Já fiz alterações assim pra ver se enxergava, mas não deu certo:

Código: Selecionar todos

          if (.not. file ('C:\SISTEMA\xxxx.xxx')) .or. (.not. file ('C:\SISTEMA1\xxxx.xxx')) .or. (.not. file ('D:\SISTEMA1\xxxx.xxx')) .or. (.not. file ('D:\SISTEMA\xxxx.xxx')) 
Me parece que algo com .or .not., pensei em colocar .or. .and. mas, nesse caso acredito que aí que não vai encontrar mesmo.

Enfim, aguardo mais informações.

Atenciosamente,
MICROVOLUTION
www.mvinfo.wmx.net.br
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
microvolution
Usuário Nível 5
Usuário Nível 5
Mensagens: 1231
Registrado em: 02 Set 2011 22:17
Contato:

Como usar IF...ENDIF nos comandos GET e SAY?

Mensagem por microvolution »

pessoal para poder funcionar até alguém descobrir o que está errado, o código abaixo:

Código: Selecionar todos

if .not. file ('C:\SISTEMA\xxxx.xxx') .or. .not. file ('C:\SISTEMA1\xxxx.xxx') .or. .not. file ('D:\SISTEMA1\xxxx.xxx') .or. .not. file ('D:\SISTEMA\xxxx.xxx')
desmembrei-o em várias linhas. Ficou grande, mas, temporariamente está funcionando (endendei-os um dentro do outro):

Código: Selecionar todos

if .not. file ('C:\SISTEMA\xxxx.xxx')
   if .not. file ('C:\SISTEMA1\xxxx.xxx') 
      if .not. file ('D:\SISTEMA1\xxxx.xxx') 
         if.not. file ('D:\SISTEMA\xxxx.xxx')
         else
         endif
      else
      endif
   else
   endif
else
endif
Se alguém tiver mais alguma ideia, solução, sugestão para que o código fique menor, agradecerei novamente!

Atenciosamente,
MICROVOLUTION!
Grato,
MICROVOLUTION - 16 anos Evoluindo Com Você!


Você já leu a Bíblia hoje?
João 3:16 - Porque Deus amou ao mundo de tal maneira que deu seu Único Filho para que todo aquele que nEle crê não pereça mas tenha a Vida Eterna!
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

Como usar IF...ENDIF nos comandos GET e SAY?

Mensagem por Toledo »

microvolution escreveu:pessoal para poder funcionar até alguém descobrir o que está errado
O problema está no uso do operador .OR. neste seu código:

Código: Selecionar todos

if .not. file ('C:\SISTEMA\xxxx.xxx') .or. .not. file ('C:\SISTEMA1\xxxx.xxx') .or. .not. file ('D:\SISTEMA1\xxxx.xxx') .or. .not. file ('D:\SISTEMA\xxxx.xxx')
Com o uso de .OR. no código acima, então para entrar no IF, basta que um dos 4 arquivos não exista. Só não vai entrar no IF, se TODOS os 4 arquivos forem encontrados.

Teria que fazer um teste trocando .OR. por .AND., por exemplo:

Código: Selecionar todos

if !file('C:\SISTEMA\xxxx.xxx') .AND. !file('C:\SISTEMA1\xxxx.xxx') .AND. !file('D:\SISTEMA1\xxxx.xxx') .AND. !file('D:\SISTEMA\xxxx.xxx')
Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

IF com condição validando erroneamente

Mensagem por alxsts »

Olá!
microvolution escreveu:Se quiser pode ter a liberdade de redirecionar para um novo tópico.
No momento, apenas o Toledo, como administrador do fórum, pode fazer isto, e o fez, após clarear a dúvida que existia sobre o código por você postado.
[]´s
Alexandre Santos (AlxSts)
Responder