Inserir dados TXT em MySQL
Hoje mostrarei duas maneiras de se inserir linhas que estão em arquivos TXT em Bancos de Dados MySQL, utilizando para isso PHP. Resolvi criar esse tópico para ajudar pessoas que possam passar pelo mesmo problema que eu.
Certo dia, tive a idéia de criar um mecanismo em AJAX para buscar códigos de procedimentos do SUS (Sistema Único de Saúde) de maneira rápida, sem ter de inserir linha por linha no banco de dados. Como eu já possuía a tabela com códigos no formato PDF, bastou transferir os dados para um arquivo TXT como mostrado abaixo:
Arquivo: arquivo.txt
0503010014 ACOES RELACIONADAS A DOACAO DE ORGAOS TECIDOS E CELULAS
0408010045 ARTROPLASTIA ESCAPULO-UMERAL PARCIAL
0503010022 ACOES RELACIONADAS A DOACAO DE ORGAOS TECIDOS E CELULAS REALIZADAS POR EQUIPE DE OUTRO ESTABELECIMENTO DE SAUDE
0408040084 ARTROPLASTIA TOTAL PRIMARIA DO QUADRIL CIMENTADA
0301120013 ACOMPANHAMENTO DE PACIENTE C/ FENILCETONURIA
0303130024 ATENDIMENTO A PACIENTE SOB CUIDADOS PROLONGADOS POR ENFERMIDADES CARDIOVASCULARES (POR DIA)
0301120021 ACOMPANHAMENTO DE PACIENTE C/ FIBROSE CISTICA
0303130032 ATENDIMENTO A PACIENTE SOB CUIDADOS PROLONGADOS POR ENFERMIDADES PNEUMOLOGICAS (POR DIA)
0301120030 ACOMPANHAMENTO DE PACIENTE C/ HEMONOGLOBINOPATIAS
0310010020 ATENDIMENTO AO RECEM-NASCIDO EM SALA DE PARTO
0301120048 ACOMPANHAMENTO DE PACIENTE C/ HIPOTIREOIDISMO CONGENITO
0502010010 AVALIACAO CLINICA DE MORTE ENCEFALICA EM MAIOR DE 2 ANOS
0404010016 ADENOIDECTOMIA
0502010029 AVALIACAO CLINICA DE MORTE ENCEFALICA EM MENOR DE 2 ANOS
0306020017 AFERESE TERAPEUTICA
0201010038 BIOPSIA CIRURGICA DE TIREOIDE
0409070017 ALARGAMENTO DA ENTRADA VAGINAL
0201010046 BIOPSIA DE ANUS E CANAL ANAL
0403050014 ALCOOLIZACAO DE NERVO CRANIANO
Esse arquivo possui centenas de linhas, porém mostrei algumas delas como exemplo. Vamos agora ao script PHP responsável por ler o arquivo.txt.
Arquivo: index.php
<?php
//Abrindo o arquivo
$file = 'arquivo.txt';
$lines = file($file);//Abrindo a conexão com o banco de dados
include("conexao/sphp_conexao.php");
//Lendo linha por linha do arquivo.txt
for($i = 0; $i < sizeof($lines); $i++) {
$line = $lines[$i];
//Criando uma expressão regular para compreender o padrão de cada linha do arquivo.txt
$RegExp = "/^([[:digit:]]{10})(.{1,})/";
if (preg_match($RegExp,$line,$matches)) {
//Tentando inserir a linha atual ao banco de dados
echo "Inserindo: <b>{$matches[1]} {$matches[2]}</b><br>";
$bd_strSQL = "INSERT INTO sus_procedimentos (bdCod, bdProcedimento) VALUES ('{$matches[1]}', '{$matches[2]}')";
$bd_objRS = mysql_query($bd_strSQL,$bd_objConn) or die($bd_msg[2]."<br />Erro: ".mysql_error());
if (mysql_affected_rows() != 0) {
echo $i." - Inserido com sucesso!<br>";
} else {
echo "Nenhuma ocorrência com o termo: <b>{$matches[1]} {$matches[2]}</b> foi inserida no Banco de Dados<br>";
}
} else {
echo "Erro: <br>". $line."<br>";
}
}//Fechando a conexão com o banco de dados
mysql_close($bd_objConn);
?>
Observação: Os arquivos index.php e arquivo.txt deverão ficar na mesma pasta!
Notem que criei uma expressão regular para interpretar o formato de cada linha do arquivo.txt, porém não irei explicar sobre expressões regulares pois foge do escopo desse artigo. Você também poder recortar substrings para inserir cada item no banco de dados, funcionando da mesma maneira.
A estrutura do banco de dados ficaria da seguinte forma (nome da tabela ficou: sus_procedimentos):
Coluna Tipo Collation Atributos Nulo Padrão Extra
1 bdId int(10) UNSIGNED Não None AUTO_INCREMENT 2 bdCod varchar(11) latin1_general_ci Não None 3 bdProcedimento text latin1_general_ci Não NoneFica aí mais essa dica, de como inserir dados em txt em bancos de dados MySQL. Espero que gostem!
Abraços!
Discussão (1)
Carregando comentários...