Jump to content
SecretStory

Localidades de Portugal

Recommended Posts

SecretStory

Olá!

Arranjei os 3 ficheiros (distritos.txt,concelhos.txt,todos_cp.txt) que a CTT disponibiliza. Fiz um script que insere os distritos numa tabela SQL para distritos, outra para os concelhos e outra para as localidades. Acontece que quando o script está a inserir as localidades, chega a um ponto (e sempre o mesmo) que deixa de inserir. Basicamente chega a localidade 'Chãs' e deixa de inserir.

Já aconteceu isto com alguem (mesmo que seja com outros exemplos)?

Share this post


Link to post
Share on other sites
KTachyon

Será que a tua script pára quando há um erro? E, nesse caso, daria jeito ter acesso a esse erro para resolver esse problema :)


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
SecretStory

Olá. Muito obrigado pela disponibilidade de responderem!

Ktachyon, o script não emite qualquer tipo de erro. Simplesmente chega à localidade Chãs e pára de inserir dados. Mas o script continua...

Rui, não, já tive esse problema (ele escrevia até apanhar chars que não reconhecia, ex: Loul (para Loulé))

# Inserting data for table 'Localidades'

echo "\nA inserir registos na tabela <b>".GDE_DB_PREFIX."localidades</b>...";
        
$selLocal = "SELECT localidade FROM localidades l LEFT OUTER JOIN concelhos c ON l.id_concelho=c.id LEFT OUTER JOIN distritos d ON c.id_distrito=d.id ";
        
$ins = "INSERT INTO ".GDE_DB_PREFIX."localidades (id_concelho,localidade) ";
        
$fileObj = new File("etc/todos_cp.txt");
$rows = $fileObj -> read();
foreach ($rows as $row) {
     $data=explode(";",$row);
     $qryLocal = $dbObj -> query($selLocal."WHERE localidade='".$data[3]."' AND old_cod_distrito='".$data[0]."' AND old_cod_concelho='".$data[1]."'");
     if(!mysql_num_rows($qryLocal)) $dbObj -> query($ins.'SELECT c.id,"'.$data[3].'" FROM concelhos c LEFT OUTER JOIN distritos d ON c.id_distrito=d.old_cod_distrito WHERE old_cod_distrito="'.$data[0].'" AND old_cod_concelho="'.$data[1].'"') or die($FAILED."(".mysql_error().")");  
}
    
     echo $OK."\n<br />";
          
# ---------------------------------------------------- 

esse é o codigo que agora está. O queryLocal é só para reparar se já inseri a localidade com o cod_concelho e cod_distrito (pq há mais q uma localidade com o mesmo nome em PT). Já tentei sem usar a classe file, já tentei inserir os values 1º num array, e dps é que insiro todos numa só vez e já tentei também sem a inserção "encadeada" (acho que como está, ganha desempenho). Já cortei o ficheiro em dois. etc. De todas a 1001 formas que fiz, nenhuma deu resultado.

Não sei se o que vou dizer está errado, mas não será problemas de cache ou algo relacionado? é que o ficheiro têm 200k++ linhas.   

Share this post


Link to post
Share on other sites
SecretStory

Ivan, tás a falar do error_reporting()? Já o meti para emitir todo o tipo de erro, mas mesmo assim nada...

Share this post


Link to post
Share on other sites
IvanGS

isso aconteceu-me quando fiz um script para exportar ficheiros CSV's para BD...

Share this post


Link to post
Share on other sites
SecretStory

E não tiveste solução para tal problema? É que já apresentei isto aos meus professores, amigos que dominam PHP +/- como eu e ngn encontrou o problema. Agora decidi postar aqui para ver se há solução.

Share this post


Link to post
Share on other sites
IvanGS

a solução que encontrei foi simples lol

aquilo são ficheiros que vem de uma programa de contabilidade (aquilo nem vinha formatado em UTF-8 e os números vinham em formato cientifico... os números lixem-me que tive que resolver sozinho lol)

liguei para um dos programadores a dizer que era preciso que os ficheiros viessem em UTF-8...

tu usas o que para programar?

Share this post


Link to post
Share on other sites
IvanGS

mas pode não se aplicar no teu caso...

na tua BD, permites campos vazios?

Share this post


Link to post
Share on other sites
SecretStory

Uso o Geany. :s que é um bcd fraquinho comparadamente com o Nusphere...

Pois, na tabela os campos estão como NOT NULL... mas não sei se é isso que mencionas...

Share this post


Link to post
Share on other sites
SecretStory

Não sei se isso ajuda, pois no readme.txt diz q os campos (que estou a utilizar) são sempre preenchidos.

1) Designação: DD

  Conteúdo:  Código do Distrito

  Tipo:      Alfa-numérico, sempre preenchido

2) Designação: CC

  Conteúdo:  Código do Concelho

  Tipo:      Alfa-numérico, sempre preenchido

4) Designação: LOCALIDADE

  Conteúdo:  Nome da localidade

  Tipo:      Alfa-numérico, sempre preenchido

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.