[GSAK macro] Criar filtro a partir de Csv


Para além do canivete suíço do geocaching, este espaço serve para discussão de outros aplicativos de gestão de bases de dados

Moderadores: hulkman, migueis

Avatar do Utilizador

Geocacher Viciado
Geocacher Viciado

Mensagens: 1003

Registado: terça 27 abr 2010, 20:30

Localização: Valongo - Porto

Mensagem Post: #1 a sexta 29 abr 2011, 17:54 

[GSAK macro] Criar filtro a partir de Csv

Após a criação de uma fórmula de selecção de caches, ficou a necessidade de passar a lista para o GPS.

Com a ajuda do hulkman e do jasafara, ou seja eles é que fizeram tudo ;), surgiu uma macro que a partir de um ficheiro Csv apenas com os GCcode's das caches pretendidas, marca essas caches com o UserFlag e depois filtra-as, ficando prontas para gerar o gpx para colocar no GPS :)

O ficheiro Csv pode ser criado, por exemplo, a partir de um qualquer filtro no Excel dos IAAN, que não seja facilmente implementado directamente no GSAK.
  Código:
Declare Var=$CsvFile Type=String

# Cancel any existing filter to ensure that you are reading all entries in the database.
# Cancelar qualquer filtro existente para garantir que está a ler a base de dados completa.
CANCELFILTER
GOTO Position=Top

USERFLAG type=clear range=all

# Step through the database and write the code to a delimitered variable.
# Percorrer a base de dados e escrever o código para uma variável delimitada.
$CodeList=""
WHILE NOT($_EOL)
   $Codelist=$CodeList+"$d_Code;"
   GOTO Position=Next
ENDWHILE

# Put the fully qualified Csv file name in the following variable.
# Coloca o nome completo do arquivo CSV na seguinte variável.
$CsvFile="nome completo do ficheiro (incluindo o "caminho")"

# This routine assumes you are using UserFlag.
# Esta rotina assume que estás a usar UserFlag.
FILEREAD File=$CsvFile
    IF $line <> ""
       $lCode=Extract($line,",",1)
       IF RegEx($lCode,$CodeList)
          MFILTER Expression=$d_Code=$lCode
          IF $_FilterCount=1
             $d_UserFlag=TRUE
          ENDIF
       ENDIF
    ENDIF
ENDREAD

# Executar o filtro UserFlag
FILTER name="UserFlag"

GOTO Position=Top


Atenção: $CsvFile="nome completo do ficheiro (incluindo o "caminho")"
Imagem Imagem Imagem
Avatar do Utilizador

Geopt Proud Member
Geopt Proud Member

Mensagens: 30152

Registado: domingo 25 abr 2010, 01:07

Localização: Lisboa

Mensagem Post: #2 a sexta 29 abr 2011, 18:19 

Re: [GSAK macro] Criar filtro a partir de Csv

É preciso ter em atenção que esta macro está a utilizar a mesma UserFlag da [GSAK macro] CheckArchivedPT...
Para mim não acho grave não ficar com a marca para as arquivadas, mas quem ache tem de ter isso em atenção. Uma hipótese será utilizar qualquer um dos campos Userdata (ex $d_User4="1") em alternativa à UserFlag.
Imagem Imagem
Avatar do Utilizador

Geopt Proud Member
Geopt Proud Member

Mensagens: 30152

Registado: domingo 25 abr 2010, 01:07

Localização: Lisboa

Mensagem Post: #3 a sexta 29 abr 2011, 18:25 

Re: [GSAK macro] Criar filtro a partir de Csv

Claro que se pode trabalhar com BD distintas cada uma para seu objectivo...
Imagem Imagem
Avatar do Utilizador

Geocacher Viciado
Geocacher Viciado

Mensagens: 1003

Registado: terça 27 abr 2010, 20:30

Localização: Valongo - Porto

Mensagem Post: #4 a sexta 29 abr 2011, 20:40 

Re: [GSAK macro] Criar filtro a partir de Csv

Exactamente. Eu assumi que o uso das "UserFlag's" é para consultar na altura e depois descartar. Mas, se as quiserem conservar, têm de utilizar outro campo para esta macro.

Outra coisa, a linha: FILTER name="UserFlag", só funciona se anteriormente se criar um filtro chamado "UserFlag" e que consiste em seleccionar apenas as caches com "UserFlag". Isto deve de dar para fazer completamente no código, mas como não sei [:I)] e fazer o filtro também não dá muito trabalho...
Imagem Imagem Imagem

Voltar para GSAK

Quem está ligado:

Utilizadores a ver este Fórum: Nenhum utilizador registado e 2 visitantes

Powered by PHPBB - Geopt.org 2013