Unlock a world of possibilities! Login now and discover the exclusive benefits awaiting you.
Pessoal boa tarde,
Tenho um diretório em rede com vários subpastas, exemplo:
\\BRITJ\ARQUIVOS
Subpastas:
2012
JAN02J012
JAN032012
.....
OCT31012
Nas subpastas separadas por dia tenho diversos arquivos de diferentes extensões (*.pdf, *.exe, *.zip, *.rar).
Inicialmente preciso listar em um tabela (in line), todos os arquivos de extensões *.pdf, *.xls, alguémjá precisou de algo parecido, sugere algo?
PS: Preciso montar um script que percora o diretório \\BRITJ\ARQUIVOS\2012 e percorra todas as subpastas, relacionando apenas os arquivos de extensões *.pdf, *.xls conforme abaixo:
ID Diretorio Arquivo
01 \\BRITJ\ARQUIVOS\2012\JAN02J012 100.xls
02 \\BRITJ\ARQUIVOS\2012\JAN02J012 100.pdf
03 \\BRITJ\ARQUIVOS\2012\JAN02J012 101.xls
04 \\BRITJ\ARQUIVOS\2012\JAN02J012 101.pdf
Sugestões?
Fiz alguns testes e para mim funcionou depois de tirar uns espaços em branco:
Estava assim:
(Root&' \*' )
Ficou assim:
(Root&'\*' )
Parece que ao jogar o código aqui no forum, surgiram alguns espaços adicionais...
Em qualquer ponto dos loops, pode testar o valor das variáveis com o Trace. Assim:
Trace $(Root);
Trace $(Ext);
Trace $(File);
Talvez, ainda em script, na aba de settings ( configurações) marque o 'Can Execute External Program', mas acho que não seria necessário
Abs,
Weslley,
Você pode usar este trecho que faz parte do help da estrutura do for each...
Já tem a maior parte do que precisa lá. Precisa ajustar alguns parâmetros:
Coloque a sub e chamada da sub no script.
Ajuste o diretório inicial na última linha ( call dodir('\\BRITJ\ARQUIVOS' )) e acerte as extensões que precisa:
SUB DoDir (Root)
FOR Each Ext in 'qvw', 'qva', 'qvo', 'qvs'
FOR Each File in filelist (Root&' \*.' &Ext)
LOAD
'$(File)' as Name,
FileSize( '$(File)' ) as Size,
FileTime( '$(File)' ) as FileTime
autogenerate 1;
NEXT File
NEXT Ext
FOR Each Dir in dirlist (Root&' \*' )
call DoDir (Dir)
NEXT Dir
ENDSUB
CALL DoDir ('C:')
Abs,
Erich
Erich boa tarde, obrigado pela dica.....
Tirando com base o que temos na documentação, estou testando o codigo abaixo e a variavel File vem sempre vazia.
Mesmo existindo o arquivo 'C:teste.qvw'
Pode me auxiliar informando no código abaixo o que está errado, não estou identificando.
SUB DoDir (Root)
FOR Each Ext in 'qvw','qva','qvo','qvs' // 'xls', 'pdf'
FOR Each File in filelist (Root&' \*.'&Ext)
LOAD
'$(File)' As Nome,
FileSize('$ (File)') As Tamanho,
FileTime('$ (File)') As HoraDoArquivo,
Autogerenate 1;
NEXT File
NEXT Ext
FOR Each Dir in dirlist (Root&' \*' )
CALL DoDir (Dir)
NEXT Dir
ENDSUB
CALL DoDir ('C:')
Desde já agradeço
Fiz alguns testes e para mim funcionou depois de tirar uns espaços em branco:
Estava assim:
(Root&' \*' )
Ficou assim:
(Root&'\*' )
Parece que ao jogar o código aqui no forum, surgiram alguns espaços adicionais...
Em qualquer ponto dos loops, pode testar o valor das variáveis com o Trace. Assim:
Trace $(Root);
Trace $(Ext);
Trace $(File);
Talvez, ainda em script, na aba de settings ( configurações) marque o 'Can Execute External Program', mas acho que não seria necessário
Abs,
Erich mais uma vez obrigado.
O erro estava ocorrendo devido a espações em brancos.
Agora conisgo listar todos os arquivos em uma subpasta.
Falta apenas criar um laço no diretório \\BRITJ\ARQUIVOS\2012 e dentro passar subpasta por subpasta alterado a ultima linha do código para:
//call DoDir ('\\BRITJ\ARQUIVOS\2012\'&SUBPASTA')
Code
// Percorre todos os arquivos parametrizado Ext
sub DoDir (Root)
for each Ext in 'xls','pdf'
for each File in filelist (Root&'\*.'&Ext)
Load
'$(File)' as Name,
FileSize('$(File)') as Size,
FileTime('$(File)') as FileTime
autogenerate 1;
next File
next Ext
for each Dir in dirlist (Root&'\*')
call DoDir (Dir)
next Dir
end sub
call DoDir ('\\BRITJ\ARQUIVOS\2012')
Unquode
Valeu.
Weslley,
Este trecho deveria já entrar recursivamente nos subdiretórios ( em múltiplos níveis):
for each Dir in dirlist (Root&'\*')
call DoDir (Dir)
next Dir
Veja se não há outros caracteres estranhos no meio...
Caso fosse apenas um mesmo, poderia chamar o DoDir novamente no final:
call DoDir ('\\BRITJ\ARQUIVOS');
call DoDir ('\\BRITJ\ARQUIVOS\2012')
Abraços
Erich
Erich, mais uma vez ponto para você!
Estava correto eu que não tinha testando ainda no diretorio final, esta tudo ok, esta com laço recursivamente nos subdiretórios.
Um ultima pergunta, preciso saber a quantidade de páginas que tem cada arquivo *.pdf , me sugere algo para fazer isso no qlikview ?
Em algumas linguagem de programação tem a função GetPageNum que abre o arquivo e verifica quantas páginas tem.
Exemlpo:
GetPageNum(MyPath& Application.PathSeparator & MyFile) ' pg
Olá Weslley,
Não sei dizer se existe essa função, mas veja a posibilidade de colocar a quantidade de páginas no nome do arquivo e usar a função MID para pegar o valor definido, claro que nem sempre é possível fazer isso, principalmente se são arquivos muitos dinâmicos ou tem uma quantidade muito grande.
Veja na ajuda (F1) do QlikView, tem alguma funções para pagar a data que o arquivo foi criado e etc. talvez encontre alguma relacionada ao que está buscando.
Abraço.
Aderlan obrigado pela dica, procurei mais não encontrei, provavelmente essa função não tem qlikview.
Terei que recorrer ao antigo excel + vba ....o duro que tenho uma quantidade muito grande de arquivos, e isso demora muito.
Uma pena...
Obrigado pela tentativa....
Boa noite Weslley,
O QlikView aceita perfeitamente as macros do Excel com pequenas adaptações, veja o editor de módulos, já usou?
Dê uma buscada aqui mesmo na community, vai encontrar bastante códigos legais.
Lembrando que o uso de macros não é rocomendado pela QlikTech.
Abraço.