Re: Caça ao CP3 - Ranking por nº de códigos postais (XXX)
Posted: Mon Jul 23, 2012 5:38 pm
Atualizado para 381
Click here if you want to track your Euro banknotes
https://forum.eurobilltracker.com/
Boa!A. Simões wrote:Actualizado para 363
Code: Select all
CP3 633
CP4 225 (ou 255)
CP7 1477
Code: Select all
CP3 604
CP4 230
CP7 1271
Isso quer dizer que estás mais perto do que eu pensava...lmviterbo wrote:Eis os números dados pelo cp3_v008.pyc:Code: Select all
CP3 604
Essa é uma das opções de correr o Python, que também está documentada naquele ficheiro do curso da LiveWires. E a mais simples de facto. O único problema em Windows é que se houver algum problema ou erro a janela é fechada tão depressa que não dá tempo de ver qual foi o erro, ou seja, fica-se sem se perceber o que é que aconteceu. No Macintosh é assim que eu o executo porque a janela fica sempre aberta, mesmo havendo erros.lmviterbo wrote:Para já, a maneira mais fácil de usar isto, pelo menos instalando o Python 3.3.2, é pôr o ficheiro cp3_v008.pyc no mesmo diretório onde está o ficheiro das notas (notes_entered_by_NNNNN.csv), e abri-lo aí diretamente com duplo clique. A janela que surge pede então o nome do ficheiro das notas. É escrevê-lo (infelizmente não para copiar e colar aqui) e clicar em Enter.
Code: Select all
########################################################################
# Validação da informação da nota, na nacionalidade e do código postal #
########################################################################
# A validação do código postal, bem como as acções a tomar em função
# do resultado obtido, é efectuada numa série de etapas sucessivas,
# como se descreve de seguida.
#
# Se faltar algum dos parâmetros da nota necessários à execução do
# programa, interrompe-se a execução e alerta-se para a possibilidade
# de se estar a usar um ficheiro de notas censurado ou de o ficheiro
# ter sido alterado após ter sido descarregado do site do EBT.
#
# Verifica-se a existência de informação nas seguintes colunas de
# cada linha do ficheiro:
# - valor, nserie, data_hora, pais, cpostal, ccurto, ebt_id
########################################################################
# Começa-se por verificar se a nota é portuguesa, caso em que o campo
# do país deverá conter 'Portugal'. Não é necessário considerar as
# variações do nome de Portugal, porque o ficheiro csv contém sempre
# a versão inglesa e o nome do país é controlado no momento do registo.
#
# Sendo uma nota portuguesa passa-se à validação do código postal,
# começando-se por retirar todos os espaços em branco, tabs e
# caracteres equivalentes do final do código postal.
#
# TESTE: CP7 + designação postal
# Primeiro procura-se um CP7 com algum texto adicional, que pode ser a
# designação postal ou algum texto inserido por engano no campo do
# código postal, ao registar a nota. Para que esta possibilidade seja
# validada o código postal terá de ter o seguinte formato:
# - quatro algarismos iniciais, não começados por 0, correspondentes
# ao CP4 (aceita-se qualquer combinação)
# - qualquer combinação dos seguintes separadores: '-', '–', '—', '_',
# espaço, tab, '.', '+', ':', '/'
# - três algarismos, correspondentes ao CP3 (qualquer combinação)
# - poderá ter ou não qualquer combinação dos separadores anteriores,
# seguidos ou não de um texto arbitrário sem algarismos; a não
# existência de algarismos após os separadores é importante, para
# que códigos postais do tipo '9234.5679Coimbra', rejeitados por
# este teste, não sejam validados posteriormente pelo teste de
# CP4 (9234) com designação postal (.5679Coimbra).
# Em caso de validação aceita-se o CP3, o CP4 e o CP7. Se o separador
# entre o CP4 e o CP3 não for apenas o sinal de subtracção gera uma
# mensagem de erro 'CP7_Separador'. Se houver qualquer tipo de
# separador ou de texto após o CP7 gera mensagem de erro 'CP7_Texto'.
#
# TESTE: CP4 + designação postal
# Se o código postal não for validado no teste anterior procura-se
# agora um CP4 com algum texto adicional, que pode ser a designação
# postal ou algum texto inserido por engano no campo do código postal,
# ao registar a nota. Para que esta possibilidade seja validada o
# código postal terá de ter o seguinte formato:
# - quatro algarismos iniciais, não começados por 0, correspondentes
# ao CP4 (aceita-se qualquer combinação)
# - poderá ter ou não qualquer combinação dos seguintes separadores
# ('-', '–', '—', '_', espaço, tab, '.', '+', ':', '/'), seguidos
# ou não de um texto arbitrário sem algarismos; a não existência
# de algarismos após os separadores é importante, para que códigos
# postais do tipo '9234.5679Coimbra', rejeitados pelo teste anterior,
# não sejam agora validados como um CP4 (9234) com designação postal
# ou texto adicional (.5679Coimbra).
# Em caso de validação aceita-se o CP4. Se houver qualquer tipo de
# separador ou de texto após o CP4 gera mensagem de erro 'CP4_Texto'.
#
# Se o código postal não for validado em nenhum dos testes anteriores,
# considera-se que não contém um código postal válido. Neste caso é
# apenas gerada uma mensagem de erro 'CP_Invalido'.
########################################################################
# Mensagens de erro geradas durante a leitura do ficheiro csv:
# CSV_Leitura : interrompe a leitura do ficheiro e avisa que se está
# a usar um ficheiro de notas censurado, ou que o mesmo
# foi alterado depois de ter sido descarregado do EBT
#
# Mensagens de erro/aviso geradas durante a validação do código postal:
# CP7_Separador : o código postal é validado, mas informa-se que o
# separador entre o CP4 e o CP3 deve ser apenas o
# sinal de subtracção
# CP7_Texto : o código postal é validado, mas informa-se que não
# se deve inserir nenhum texto após o CP7
# CP4_Texto : o código postal é validado, mas informa-se que não
# se deve inserir nenhum texto após o CP4
# CP3_NaoExiste : informa-se que o CP3 não existe
# CP_Invalido : informa-se que o código postal não é válido
#
# No início do ficheiro com a listagem dos erros e avisos encontrados
# durante a leitura do ficheiro csv, deve ser apresentado um resumo
# com o número total de erros e avisos encontrados durante a análise
# do ficheiro das notas, e deve ser explicado o significado de cada
# tipo de erro e aviso. Segue-se uma listagem de todos os erros e
# avisos encontrados, durante a análise, ordenada por tipo de erro
# ou aviso, começando pelos mais graves.
########################################################################
lmviterbo wrote:Sendo assim, acho que vou passar a usar o teu programa, que é rapidíssimo. Quanto à contagem das ZCP, logo se vê. Perfeito era que o programa contasse 1495 e 1496 como uma ZCP (1495), mas também contasse 1496 como uma ZCP, mesmo não havendo nenhum registo em 1495.
Não fiz nada diferente. Simplesmente devia estar a usar um ficheiro de notas antigo, não percebo como… E agora usei o Python que jé tinha usado, a versão 3.3.2.Castanhola wrote:Mas fizeste agora alguma coisa diferente? Qual a versão do Python, 2 ou 3? Conta porque estou curioso.![]()
Aqui vai então.Castanhola wrote:Quanto à contagem dos CP7 ou ZCP, basta que me expliques as regras para contar a coisa, que eu implemento-a. Posso até contar as duas coisas.
É por essas e por outras razões que os nomes de pastas e ficheiros nunca deve conter acentos, cedilhas, etc.lmviterbo wrote:Esqueci-me de dizer que não consigo usar os passos todos que explicaste porque o programa se baralha com nomes de pastas do tipo «Luís Miguel Viterbo» — o «í» é transformado noutra coisa qualquer e a resposta é que a diretoria não existe.
Internamente o programa já cria uma lista dos CP3, CP4 e CP7 existentes no ficheiro csv analisado.lmviterbo wrote:No ficheiro de notas, reduzir CP7 a CP4 e manter os CP4 que existem (isto é, extrair 1495 de 1495-354 e extrair também 1495 de 1495)
Envia-me a lista de ZCP existentes. Isso obtêm-se nos CTT? Ou foste tu que a criaste?lmviterbo wrote:Para cada CP4 agora obtido, comparar com a lista oficial de ZCP existentes.
Esta regra funciona sempre? Não há casos em que não seja assim?lmviterbo wrote:Extrair a ZCP cujo número seja igual ou imediatamente inferior ao CP4.
Este passo é desnecessário.lmviterbo wrote:Remover duplicados das ZCP assim obtidas
É por essas e por outras que foi criado o Unicode há já um quarto de século, e as pastas e ficheiros, em qualquer sistema operativo, podem conter acentos, cedilhas e carateres não latinos. Os programadores e criadores de software é que parece que ignoram este facto.Castanhola wrote:É por essas e por outras razões que os nomes de pastas e ficheiros nunca deve conter acentos, cedilhas, etc.
Fui eu que a criei a partir da lista de código postal dos CTT. Verifico regularmente as atualizações da lista. Pelo menos desde 2005, as 507 ZCP têm-se mantido inalteradas. Julgo até que não houve nenhuma alteração desde a introdução do CP7, em 1998.Castanhola wrote:Envia-me a lista de ZCP existentes. Isso obtêm-se nos CTT? Ou foste tu que a criaste?
Pelos vistos, não percebeste o que disse. «Igual ou inferior» não define nenhum tamanho máximo de salto.Castanhola wrote:Esta regra funciona sempre? Não há casos em que não seja assim?lmviterbo wrote:Extrair a ZCP cujo número seja igual ou imediatamente inferior ao CP4.
Não há casos em que o CP4 tenha saltos maiores que 100? Imagino que não, mas não verifiquei (acima de 1000 evidentemente).
Sim, eu também não faço nenhuma verificação, porque os CP4 existentes, ao contrário das ZCP, têm variado muito ao longo do tempo: surgem novos CP4 e desaparecem antigos mais do que uma vez por ano. Por isso é impossível manter uma lista de verificação dos CP4.Castanhola wrote:E se alguém introduz um CP4 que não exista? Eu neste momento não faço essa verificação (qualquer conjunto de quatro algarismos que não comece por zero é considerado).
Pelo que disse atrás, é impossível saber que CP4 existem. Por isso se uma ZCP é 4150 e a ZCP seguinte é 4200, o programa deverá considerar todos os CP4 entre 4150 e 4199 como pertencentes à ZCP 4150 (se bem que, atualmente, existam apenas 4150, 4169 e 4199).Castanhola wrote:Consideremos por exemplo que após 2100 a próxima ZCP é 2200, e que apenas existirem CP4 de 2100 a 2109. Se alguém registar em 2198 que não existe, por exemplo, que fazer? Considerar a ZCP 2100 ou não considerar nenhuma ZCP (e emitir uma mensagem de erro)?