Página 1 de 1

IF com condição validando erroneamente

Enviado: 28 Abr 2015 10:16
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!

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

Enviado: 28 Abr 2015 13:34
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.

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

Enviado: 28 Abr 2015 14:30
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

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

Enviado: 28 Abr 2015 16:49
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!

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

Enviado: 28 Abr 2015 17:31
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,

IF com condição validando erroneamente

Enviado: 28 Abr 2015 23:15
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.