Organizando una base de datos de calles usando PHP y LibreOffice Calc

En una de mis tareas cotidianas, me encontré con este problema: ¿Cómo organizar una base de datos de calles? ¿Cómo podría hacerlo de manera práctica y utilizando herramientas ya disponibles?

Entonces resolvió utilizar PHP y LibreOffice Calc.

Contexto

Hay un S.I (ERP + CRM) donde se hace la gerencia de todos los clientes. En este sistema todas las informaciones del registro de persona física / jurídica se utilizan en otras partes del mismo sistema. El módulo de CRM de ese sistema utiliza, en una de sus funcionalidades, los datos de dirección (ciudad, barrio, calle) para posicionar al cliente en un mapa.

Hoy tengo acceso al base de datos del sistema pero no tengo permiso de escritura. Necesito corregir los problemas, enviar por ticket al soporte del sistema y un archivo CSV para que los cambios en el base de datos.

Problemas

Las calles registradas están fuera del estándar utilizado en el mapa donde se deben exhibir, con lo que es imposible ubicar al cliente en el mapa.

Esta es una lista de los elementos que serán corregidos:

  • Los logros que se refieren a la misma calle necesitan tener la misma grafía;
  • Abreviaturas en el nombre de la  Calles;
  • En la grafía de las calles que tiene números, necesitan estar por extenso;
  • Calles que tienen la numeración de inicio y fin en el nombre;
  • Calles con números romanos;

Solución desarrollada

En el primer momento, conversando con el equipo del Comercial, me dieron la idea de utilizar el LibreOffice Calc para organizar los datos y hacer las correcciones.

Obteniendo los datos, organizando y haciendo las primeras correcciones

Utilizando o LibreOffice Calc:

Obtuvo los datos accediendo a la base de datos PostgreSQL del sistema y ejecutando un SQL. He copiado los resultados para el LibreOffice Calc.

De ahí el nombre de las columnas facilitar la identificación y manipulación, quedó así:

ID LOGRADOURO CODBAIRRO CEP CODCIDADE

 

Dar nombre a las columnas me ayudó a la hora de usar la opción Clasificar de Calc. He seleccionado todo el área de la tabla donde estaba los datos, dentro de la opción CLASIFICAR, seleccioné la columna LOGRADOURO en la opción Clave de clasificación 1.

En el Calc, utilizando la opción Buscar y reemplazar he cambiado todos los registros que se encuadran en las condiciones:

TERMO SUBSTITUÍDO POR
R. Rua
R+ESPAÇO Rua
Tv. +ESPAÇO Travessa
RUA+ESPAÇO Rua
Av+ESPAÇO Avenida
Av.+ESPAÇO Avenida
Cel.+ESPAÇO Coronel
Dr.+ESPAÇO Doutor
Gen.+ESPAÇO General
Brig.+ESPAÇO Brigadeiro
Pre.+ESPAÇO Presidente

 

En algunos casos, existe discordancia si el logradouro es Calle, Avenida o Travessa. Esto tuvo que ser corregido también.

Utilizando PHP:

Después de hacer todas las correcciones manuales empecé a analizar los problemas para identificar cuáles serían posibles de ser resueltos usando programación en tiempo hábil.

El resultado del código desarrollado está abajo:

<?php
//ativando os erros
ini_set(‘display_errors’, ‘On’);
//Exibindo todos os erros
error_reporting(E_ALL);

$caminho_do_csv = '/var/www/html/lista-enderecos-mk.csv';
//O parâmetro FILE_TEXT especifica que o arquivo é retornado na codificação UTF-8.
$array_csv = file($caminho_do_csv, FILE_TEXT);
$map_csv = array_map('str_getcsv', $array_csv);

////////// PROBLEMAS PARA RESOLVER
//(Feito) 1- Encontrar um padrão e tudo que estiver a direita desse padrão deve ser apagado. Ex: numeração de inicio e fim no nome da rua.
//(Feito) 2- Retirar os numeros do nome do logradouro. Geralmente os numeros errados estão no final do nome.

//Função para exibir os dados de um mapa de array
// @return Sem terno
function exibe_mapa(Array $mapa_de_array)
{
if($mapa_de_array != NULL)
{
foreach ($mapa_de_array as $key => $valor)
{
print("Posição do Array exteno: ".$key."<br/>");
print("------ID: ".$valor[0]."<br/>");
print("------Logradouro: ".$valor[1]."<br/>");
print("------CODBAIRRO: ".$valor[2]."<br/>");
print("------CEP: ".$valor[3]."<br/>");
print("------CODCIDADE: ".$valor[4]."<br/>");
print('---------------------------------------------------------');
print("<br/>");
};
};
};

//Função para encontrar um padrão de texto em um mapa de array
// @return Sem terno
function encontrar_padrao(String $padrao, Array $mapa_de_array)
{
//percorrer o array para achar o padrão, se for encontrato, o texto é destacado:
//<font color='red'> texto </font>
$qtd_encontrada=0;
foreach ($mapa_de_array as $key => $valor) {
print("Posição do Array exteno: ".$key."<br/>");
print("------ID: ".$valor[0]."<br/>");
if(stripos($valor[1],$padrao) !== false){
print("------Logradouro: <font color='red'>".$valor[1]."</font><br/>");
$qtd_encontrada=$qtd_encontrada+1;
}else{
print("------Logradouro: ".$valor[1]."<br/>");
};
print('---------------------------------------------------------');
print("<br/>");
};
echo 'Total de ocorrências do padrão: '.$qtd_encontrada;
};

//Essa função contem o array com as strings que devem ser desconsideradas na busca por algum tipo de padrão de string.
// @return Retorna 1 se a string passado por parâmetro estever no array e 0 para caso contrário.
function padrao_desconsiderado(String $string)
{
//Array com os padrões que devem ser desconsiderados
$desconsiderar_padrao = array("ms-","MS-","Ms-","Rua ");
foreach($desconsiderar_padrao as $valor)
{
//A pergunta feita no IF é: Algum dos padrões que estão no array coincide com a string passada por parâmetro?
//Em outras palavras: $valor C $string || $valor esta CONTIDO em $string?
if(stripos($string,$valor) !== false){
return 1;
break;
};
};
return 0;
};

//Salvando em um arquivo CSV
// @return Sem terno
function salvando_no_arq_csv(Array $mapa_de_array)
{
//O primeiro parâmetro é o arquivo.csv que eu já criei e dei permissão 777 nele.
$fp = fopen('file.csv', 'w+');
foreach ($mapa_de_array as $key => $valor)
{
fputcsv($fp, $valor);
};

fclose($fp);
};

//Solução do problema 2
// @return Retorna o mapa de Array com os campos editados
function problema2(String $padrao, Array $mapa_de_array)
{
//percorrer o Array para achar o padrão.
//Depois eu edito a posição do array onde foi achado o padrão e salvo o novo texto editado;
$novo_mapa_de_array = $mapa_de_array;
foreach ($mapa_de_array as $key => $valor) {
if(stripos($valor[1],$padrao) !== false){
//posição onde foi encontrado o padrão
$posicao = stripos($valor[1],$padrao);
//Copiando o o valor(Array) que
$array_temp = $novo_mapa_de_array[$key];
$array_temp[1] = substr($array_temp[1],0,$posicao);
$novo_mapa_de_array[$key] = $array_temp;
};
};
return $novo_mapa_de_array;
};

//Função para encontrar um padrão que atende a expresão regular passada por parâmetro
// @return Retorna um mapa de Array com o texto corrigido
function problema3(String $expressao, Array $mapa_de_array)
{
//Variável que salva temporáriamente um mapa de array com os padrões encontrados;
$matches;
// Novo Array que será retornado contendo o texto editado
$novo_mapa_de_array = $mapa_de_array;

//percorrer o Array para achar o padrão, se for encontrato o padrão é excluido;
foreach ($mapa_de_array as $key => $valor)
{
//IMPORTANTE: a expressão precisa estár entre barras -> EX: /[0-9]/
if(preg_match('/'.$expressao.'/',$valor[1]))
{
if(padrao_desconsiderado($valor[1]) == 0){
preg_match('/'.$expressao.'/',$valor[1],$matches, PREG_OFFSET_CAPTURE);
$temp = $matches[0];
$array_temp = $novo_mapa_de_array[$key];
$array_temp[1] = substr($valor[1],0,$temp[1]);
$novo_mapa_de_array[$key] = $array_temp;
}else{
print_r("Valor: ".$valor[1]."<br/>");
printf("Variável temp[0] padrão: ".$temp[0]."<br/>");
printf("Variável temp[1] posição: ".$temp[1]."<br/><br/>");
}
}
};
return $novo_array_de_mapa;
};

//Resolve problema 2
//padrão para achar as ruas que tem a numeração de inicio e fim no nome
$padrao = ' - ';

//Resolve Problema 3
//Para achar numeros que estão no final do nome da rua
$expressao_problema_3 = '[0-9]{2,5}$';

$corrigido = problema2($padrao, $map_csv);

$corrigido2 = problema3($expressao_problema_3,$corrigido);

salvando_no_arq_csv($corrigido2);

?>

Resolviendo el problema de Packet Tracer 7.1.1 en Linux Mint 18 y 19

Yo estaba con mucha dificultad para hacer que el Packet Tracer funcione en mi Linux Mint. Después de buscar bastante y entrar en varios sitios, encontré una respuesta dada en Ask Ubuntu y en el Tech Otaku que me ayudaron a resolver el problema.

Voy a tomar este post para mostrar cómo resolví mis problemas con Packet Tracer en Linux Mint 18 e 19 (Sarah y Tara).

CONTEXTO

En Linux Mint 18 tuve problemas con esta versión de Packet Tracer. Cuando ejecuta el comando # packettracer aparecía un mensaje diciendo que el programa se estaba cargando, pero nunca abría. Para resolver este problema, basta con instalar el paquete que el profesor Samuel Henrique Bucke Brito indica en los comentarios de esa publicación.

En el Linux Mint 19 he hecho el mismo procedimiento descrito anteriormente y aún así no tuve éxito. Otros problemas surgieron, que sólo se resolvieron siguiendo otros tutoriales, principalmente la respuesta dada por Lucas Almeida a esa pregunta.

MI PROBLEMA

En el Mint 19 el Packet Tracer llega a abrir pero cuando intento expandir la ventana, el programa queda totalmente deforme.

AMBIENTE

S.O: Linux Mint 19 Cinnamon (Tara)
Kernel do Linux: 4.15.0-33-generic
Programa: Cisco Packet Tracer 7.1.1

SOLUCIONANDO EL PROBLEMA

EN EL LINUX MINT 18 (SARAH)

Después de instalar el Packet Tracer en la ruta predeterminada:

/opt/pt/

Tengo que editar el archivo:

/etc/apt/sources.list

agregando la línea:

deb http://security.ubuntu.com/ubuntu trusty-security main

Luego, ejecute los comandos:

sudo apt-get update
sudo apt-get install libicu52

o

wget http://mirrors.kernel.org/ubuntu/pool/main/i/icu/libicu52_52.1-3ubuntu0.8_amd64.deb
sudo dpkg -i libicu52_52.1-3ubuntu0.8_amd64.deb

Y por último reiniciar mi computadora.

EN EL LINUX MINT 19 (TARA)

Tengo que hacer el procedimiento anterior y también Instalar Qt libraries:

sudo apt-get install libqt5webkit5 libqt5multimediawidgets5 libqt5svg5 libqt5script5 libqt5scripttools5 libqt5sql5

Instalar libpng12:

wget http://ftp.debian.org/debian/pool/main/libp/libpng/libpng12-0_1.2.50-2+deb8u3_amd64.deb
sudo dpkg -i libpng12-0_1.2.50-2+deb8u3_amd64.deb

Y por último reiniciar mi computadora.

REFERENCIAS:

  • http://labcisco.blogspot.com/2017/08/lancamento-do-cisco-packet-tracer-71.html
  • https://vlanbr.wordpress.com/2017/09/19/resolvendo-problemas-na-instalacao-do-packet-tracer-7-1-no-debian-9/comment-page-1/#comment-20
  • https://www.tech-otaku.com/linux/getting-cisco-packet-tracer-71-to-run-on-ubuntu-1604-lts/
  • https://askubuntu.com/questions/1035523/packet-tracer-7-on-ubuntu-18-04-cannot-launch/1069009?newreg=c879977f82864bafb9db7de2b8da0b27

 

 

 

 

Resolvendo problema do Packet Tracer 7.1.1 no Linux Mint 18 e 19

Eu estava com muita dificuldade para fazer o Packet Tracer funcionar no meu Linux Mint. Depois de pesquisar bastante e rodar por vários sites, achei uma resposta dada no Ask Ubuntu e no Tech Otaku que me ajudaram a resolver o problema.

Vou aproveitar esse post para mostrar como resolvi meus problemas com o Packet Tracer no Linux Mint 18 e 19 (Sarah e Tara).

CONTEXTO

No Linux Mint 18 eu tinha problema com essa versão do Packet Tracer. Quando executava o comando # packettracer aparecia uma mensagem dizendo que o programa estava sendo carregado, mas nunca abria. Para resolver esse problema, bastava instalar o pacote que professor Samuel Henrique Bucke Brito indica nos comentários dessa publicação.

Já no Linux Mint 19 eu fiz o mesmo procedimento descrito anteriormente e mesmo assim não tive sucesso. Outros problemas surgiram, que só foram resolvidos seguindo outros tutoriais, principalmente a resposta dada pelo Lucas Almeida a essa pergunta.

MEU PROBLEMA

No Mint 19 o Packet Tracer chega abrir mas quando tento expandir a janela, o programa fica totalmente disforme.

AMBIENTE

S.O: Linux Mint 19 Cinnamon (Tara)

Kernel do Linux: 4.15.0-33-generic

Programa: Cisco Packet Tracer 7.1.1

RESOLVENDO O PROBLEMA

NO LINUX MINT 18 (SARAH)

Depois de instalar o Packet Tracer no caminho padrão:

/opt/pt/

tenho que editar o arquivo:

/etc/apt/sources.list

adicionando a linha:

deb http://security.ubuntu.com/ubuntu trusty-security main

Logo depois executar os comandos:

sudo apt-get update
sudo apt-get install libicu52

ou

wget http://mirrors.kernel.org/ubuntu/pool/main/i/icu/libicu52_52.1-3ubuntu0.8_amd64.deb
sudo dpkg -i libicu52_52.1-3ubuntu0.8_amd64.deb

E por último reiniciar meu computador.

NO LINUX MINT 19(TARA)

Tenho que fazer o procedimento acima e também Instalar o Qt libraries:

sudo apt-get install libqt5webkit5 libqt5multimediawidgets5 libqt5svg5 libqt5script5 libqt5scripttools5 libqt5sql5

Instalar o libpng12:

wget http://ftp.debian.org/debian/pool/main/libp/libpng/libpng12-0_1.2.50-2+deb8u3_amd64.deb
sudo dpkg -i libpng12-0_1.2.50-2+deb8u3_amd64.deb

E por último reiniciar meu computador.

REFERÊNCIAS:

 

Uso dos porquês

Por que

Principal Uso: questionamento sobre a razão ou motivo de um determinado acontecimento.

É a junção da preposição por com o pronome interrogativo que. Esta forma é utilizada em dois casos:

  • Se, depois de seu emprego, houver um questionamento sobre a razão ou motivo de um determinado acontecimento;
  • Se pudermos substituir pela expressão pelo(a) ou qual e variações.

Exemplos:

  • A vitória por que lutei está próxima.
  • A vitória pela qual lutei está próxima.
  • Por que (motivo/razão) você não foi ao shopping?
  • Por qual (motivo/razão) você não foi ao shopping.

Por quê

Principal uso: Somente em final da frase.

Essa forma é empregada somente no final da frase, com uso obrigatório do acento em quê.

Exemplos:

  • Ela me chamou, mas não sei por quê.
  • Correr atrás do ônibus por quê?

Porque

Principal uso: Frases afirmativas e respostas explicativas. Também causa ou finalidade.

Essa forma pode ser uma das conjunções subordinativas causais, subordinativas finais ou uma das conjunções coordenativas explicativas. Empregamos tal forma em frases afirmativas e respostas explicativas, que indiquem não só explicação, mas também causa ou finalidade. Podemos substituir a forma por pois ou como.

Exemplos:

  • Faltei à aula porque estava doente.
  • Faltei à aula, pois estava doente.
  • Porque era pequeno, os colegas não chamavam para brincar.
  • Como era pequeno, os colegas não chamavam para brincar.

Porquê

Principal uso: Sentido de razão ou motivo

Forma empregada com o sentido de razão ou motivo. É sempre precedido por artigo ou pronome e também pode variar entre singular e plural, sendo, portanto, um substantivo.

Exemplo:

  • Diga-me o porquê (o motivo) de você não querer ir ao médico.

Fiz uma imagem para ajudar  na memorização.

pirâmide dos porquês

Dicas:

  • Memorize a pirâmide e seu sentido de leitura, de baixo para cima;
  • Os ‘porquês’ intercalam entre com e sem acento;
  • A base da pirâmide começa com o ‘por que’ sem acento e separado;

 

 

Referências:

Organizando uma base de dados de logradouros usando PHP e LibreOffice Calc

Em uma das minhas tarefas do dia a dia, me deparei com esse problema: Como organizar uma base de dados de logradouros(endereços) ?Como eu poderia fazer isso de maneira prática e utilizando ferramentas já disponíveis?

Foi então que resolver usar o PHP e o LibreOffice Calc.

Contexto

Existe um S.I (ERP+CRM) onde é feito a gerência de todos os clientes. Nesse sistema todas as informações do cadastro de pessoa física/jurídica são utilizadas em outras partes do mesmo sistema. O módulo de CRM desse sistema utiliza, em uma de suas funcionalidades, os dados de endereço (cidade, bairro, logradouro) para posicionar o cliente em um mapa.

Hoje tenho acesso ao BD do sistema mas não tenho permissão de escrita. Preciso corrigir os problemas, enviar por ticket para o suporte do sistema e um arquivo CSV para eles fazerem as alterações no BD.

Problemas

Os logradouros cadastrados estão fora do padrão utilizado no mapa onde precisam ser exibidos, com isso é impossível posicionar o cliente no mapa.

Essa é uma lista dos itens que serão corrigidos:

  • Os logradouros que se referem a mesma rua precisam ter a mesma grafia;
  • Abreviações no nome do logradouro;
  • Na grafia dos logradouros que tem números, precisam estar por extenso;
  • Logradouros que tem a numeração de início e fim no nome;
  • Logradouros com números Romanos;

Solução desenvolvida

No primeiro momento, conversando com a equipe do Comercial, me deram a ideia de utilizar o LibreOffice Calc para organizar os dados e fazer as correções.

Obtendo os dados, organizando e fazendo as primeiras correções

Utilizando o LibreOffice Calc:

Obtive os dados acessando o BD PostgreSQL do sistema e executando um SQL. Copiei os resultados para o LibreOffice Calc.

Dei nome as colunas facilitar a  identificação e manipulação, ficou assim:

ID LOGRADOURO CODBAIRRO CEP CODCIDADE

Dar nome as colunas me ajudou na hora de usar a opção Classificar do Calc. Selecionei toda área da tabela onde estava os dados, dentro da opção CLASSIFICAR eu selecionei a coluna LOGRADOURO na opção Chave de classificação 1.

Ainda no Calc, utilizando a opção Localizar e substituir alterei todos os registro que se enquadra nas condições:

TERMO SUBSTITUÍDO POR
R. Rua
R+ESPAÇO Rua
Tv. +ESPAÇO Travessa
RUA+ESPAÇO Rua
Av+ESPAÇO Avenida
Av.+ESPAÇO Avenida
Cel.+ESPAÇO Coronel
Dr.+ESPAÇO Doutor
Gen.+ESPAÇO General
Brig.+ESPAÇO Brigadeiro
Pre.+ESPAÇO Presidente

Obs: Em alguns casos, existe discordância se o logradouro é Rua, Avenida ou Travessa. Isso teve que ser corrigido também.

Utilizando PHP:

Depois de fazer todas as correções manuais comecei a analisar os problemas para identificar quais seriam possíveis de serem resolvidos usando programação em tempo hábil.

O resultado do código desenvolvido está abaixo:

<?php
//ativando os erros
ini_set(‘display_errors’, ‘On’);
//Exibindo todos os erros
error_reporting(E_ALL);

$caminho_do_csv = '/var/www/html/lista-enderecos-mk.csv';
//O parâmetro FILE_TEXT especifica que o arquivo é retornado na codificação UTF-8.
$array_csv = file($caminho_do_csv, FILE_TEXT);
$map_csv = array_map('str_getcsv', $array_csv);

////////// PROBLEMAS PARA RESOLVER
//(Feito) 1- Encontrar um padrão e tudo que estiver a direita desse padrão deve ser apagado. Ex: numeração de inicio e fim no nome da rua.
//(Feito) 2- Retirar os numeros do nome do logradouro. Geralmente os numeros errados estão no final do nome.

//Função para exibir os dados de um mapa de array
// @return Sem terno
function exibe_mapa(Array $mapa_de_array)
{
if($mapa_de_array != NULL)
{
foreach ($mapa_de_array as $key => $valor)
{
print("Posição do Array exteno: ".$key."<br/>");
print("------ID: ".$valor[0]."<br/>");
print("------Logradouro: ".$valor[1]."<br/>");
print("------CODBAIRRO: ".$valor[2]."<br/>");
print("------CEP: ".$valor[3]."<br/>");
print("------CODCIDADE: ".$valor[4]."<br/>");
print('---------------------------------------------------------');
print("<br/>");
};
};
};

//Função para encontrar um padrão de texto em um mapa de array
// @return Sem terno
function encontrar_padrao(String $padrao, Array $mapa_de_array)
{
//percorrer o array para achar o padrão, se for encontrato, o texto é destacado:
//<font color='red'> texto </font>
$qtd_encontrada=0;
foreach ($mapa_de_array as $key => $valor) {
print("Posição do Array exteno: ".$key."<br/>");
print("------ID: ".$valor[0]."<br/>");
if(stripos($valor[1],$padrao) !== false){
print("------Logradouro: <font color='red'>".$valor[1]."</font><br/>");
$qtd_encontrada=$qtd_encontrada+1;
}else{
print("------Logradouro: ".$valor[1]."<br/>");
};
print('---------------------------------------------------------');
print("<br/>");
};
echo 'Total de ocorrências do padrão: '.$qtd_encontrada;
};

//Essa função contem o array com as strings que devem ser desconsideradas na busca por algum tipo de padrão de string.
// @return Retorna 1 se a string passado por parâmetro estever no array e 0 para caso contrário.
function padrao_desconsiderado(String $string)
{
//Array com os padrões que devem ser desconsiderados
$desconsiderar_padrao = array("ms-","MS-","Ms-","Rua ");
foreach($desconsiderar_padrao as $valor)
{
//A pergunta feita no IF é: Algum dos padrões que estão no array coincide com a string passada por parâmetro?
//Em outras palavras: $valor C $string || $valor esta CONTIDO em $string?
if(stripos($string,$valor) !== false){
return 1;
break;
};
};
return 0;
};

//Salvando em um arquivo CSV
// @return Sem terno
function salvando_no_arq_csv(Array $mapa_de_array)
{
//O primeiro parâmetro é o arquivo.csv que eu já criei e dei permissão 777 nele.
$fp = fopen('file.csv', 'w+');
foreach ($mapa_de_array as $key => $valor)
{
fputcsv($fp, $valor);
};

fclose($fp);
};

//Solução do problema 2
// @return Retorna o mapa de Array com os campos editados
function problema2(String $padrao, Array $mapa_de_array)
{
//percorrer o Array para achar o padrão.
//Depois eu edito a posição do array onde foi achado o padrão e salvo o novo texto editado;
$novo_mapa_de_array = $mapa_de_array;
foreach ($mapa_de_array as $key => $valor) {
if(stripos($valor[1],$padrao) !== false){
//posição onde foi encontrado o padrão
$posicao = stripos($valor[1],$padrao);
//Copiando o o valor(Array) que
$array_temp = $novo_mapa_de_array[$key];
$array_temp[1] = substr($array_temp[1],0,$posicao);
$novo_mapa_de_array[$key] = $array_temp;
};
};
return $novo_mapa_de_array;
};

//Função para encontrar um padrão que atende a expresão regular passada por parâmetro
// @return Retorna um mapa de Array com o texto corrigido
function problema3(String $expressao, Array $mapa_de_array)
{
//Variável que salva temporáriamente um mapa de array com os padrões encontrados;
$matches;
// Novo Array que será retornado contendo o texto editado
$novo_mapa_de_array = $mapa_de_array;

//percorrer o Array para achar o padrão, se for encontrato o padrão é excluido;
foreach ($mapa_de_array as $key => $valor)
{
//IMPORTANTE: a expressão precisa estár entre barras -> EX: /[0-9]/
if(preg_match('/'.$expressao.'/',$valor[1]))
{
if(padrao_desconsiderado($valor[1]) == 0){
preg_match('/'.$expressao.'/',$valor[1],$matches, PREG_OFFSET_CAPTURE);
$temp = $matches[0];
$array_temp = $novo_mapa_de_array[$key];
$array_temp[1] = substr($valor[1],0,$temp[1]);
$novo_mapa_de_array[$key] = $array_temp;
}else{
print_r("Valor: ".$valor[1]."<br/>");
printf("Variável temp[0] padrão: ".$temp[0]."<br/>");
printf("Variável temp[1] posição: ".$temp[1]."<br/><br/>");
}
}
};
return $novo_array_de_mapa;
};

//Resolve problema 2
//padrão para achar as ruas que tem a numeração de inicio e fim no nome
$padrao = ' - ';

//Resolve Problema 3
//Para achar numeros que estão no final do nome da rua
$expressao_problema_3 = '[0-9]{2,5}$';

$corrigido = problema2($padrao, $map_csv);

$corrigido2 = problema3($expressao_problema_3,$corrigido);

salvando_no_arq_csv($corrigido2);

?>