Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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);$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>";
}
}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):
Fica aí mais essa dica, de como inserir dados em txt em bancos de dados MySQL. Espero que gostem!
Abraços!
Fazer um insert em cada loop do FOR é uma péssima idéia :unsure:
O correto é concatenar os valores e utilizar um único insert, caso seja milhares de registros a serem inseridos, seria melhor ainda dividir em grupos de 500 registros(por exemplo) para cada insert.
Exemplo:
array_walk(
$file,
Você teria uma instrução SQL assim:
INSERT INTO sus_procedimentos ( bdCod, bdProcedimento ) VALUES
( '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' )
Agora basta passar essa variável $sql para a função mysql_query e correr para o abraço :lol: