Ir para conteúdo
Fórum Script Brasil
  • 0

Importar TXT para MySql em PHP


caparicio

Pergunta

Olá mestres,

Tenho um software de automação de rádio que gera diáriamente um ficheiro de log.

Com a ajuda do fórum consegui montar um script php para ler o ficheiro e separar o conteúdo exactamente como pretendia.

Até aqui tudo bem, a informação na tela aparece exactamente como pretendo e a inserção na DB MySql também fica precisamente como e onde devia ficar, no entanto apenas importa uma linha do ficheiro, neste caso, a última. Mas no ecrã aparece toda a informação que preciso. Só na importação é que escreve uma só linha.

Alguém me consegue ajudar a perceber o que me falta no código para que importe todas as linhas e não apenas uma?

Obrigado desde já.

<?php

$dia = date('d')-1;
$mes = date('m');
$ano = date('Y');

$data =("$ano-$mes-$dia").'.log';
$arquivo = file ('Z:/logzara/log/'.$data);

function ret_acent($arquivo){
$ant=$arquivo;
$arquivo = str_replace("~1","",$arquivo);
$arquivo = str_replace("'","´",$arquivo);
return $arquivo;
}
$linhas  = count($arquivo);
for ($i = 7; $i < ($linhas); $i++) {
$arquivo0 = ($arquivo[$i]);

$linhas1 = ret_acent(preg_split("'\\\\'",$arquivo0));
$linhas2 = preg_split("'-'",$linhas1[4]);

//Ecrã
echo ("$ano-$mes-$dia<br>");
echo substr("$linhas1[0]<br>",0,-14);
echo ("<br>$linhas1[1]<br>");
if (empty($linhas1[4])){
echo ("$linhas1[3]<br>");
}else{
echo ("$linhas1[2]<br>");
echo ("$linhas1[3]<br>");
}
echo ("$linhas1[4]<br>");
echo ("$linhas2[0]<br>");
echo ("$linhas2[1]<br>");
}

//Mysql
$data =("$ano-$mes-$dia");
$hora =substr("$linhas1[0]",0,-10);
$classe =("$linhas1[1]");
if (empty($linhas1[4])){
$ficheiro =substr("$linhas1[3]",0,-6);
}else{
$idioma1 =("$linhas1[2]");
$idioma2 =("$linhas1[3]");
$ficheiro =("$linhas1[4]");
$artista =("$linhas2[0]");
$musica =substr ("$linhas2[1]",0,-6);
}

//Conexão e Inserção de dados Mysql
$host = "localhost";
$user = "root";
$password = "";
$db = "radio";
$tabela = "logemissao1";

$conexao = mysql_connect("localhost","root");
if (!$conexao)
die ("Erro de conexão com localhost, o seguinte erro ocorreu -> ".mysql_error());
$banco = mysql_select_db("radio",$conexao);
$query = "INSERT INTO $tabela ( `data` , `hora` , `classe`, `idioma1`, `idioma2` , `ficheiro`, `artista` , `musica`) VALUES ('$data', '$hora', '$classe', '$idioma1', '$idioma2', '$ficheiro', '$artista', '$musica')"; mysql_query($query,$conexao);

?>

 

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

A inserção deve estar dentro do loop. Ou, ainda melhor, apenas monte o INSERT dentro do loop e o execute uma única vez, fora dele. Vai deixar o desempenho bem melhor. Este link explica melhor: http://rberaldo.com.br/inserindo-multiplos-registros-em-tabela-de-banco-de-dados/

 

PS: funções mysql_* estão obsoletas desde o PHP 5.5  e já foram removidas no PHP 7. Prefira usar MySQLi ou PDO. Veja mais aqui: http://rberaldo.com.br/mysql-obsoleto-php/


 

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Beraldo,

Muito obrigado por analisar e sugerir a correcção ao código que apresentei.

Funcionou na perfeição. Também actualizei as funções mysql_ para mysqli_ com sucesso graças às suas explicações nos links facultados.

Deixo aqui o código já corrigido para, caso de alguém precise, poder usar  e adaptar às suas necessidades.

Sendo que o ficheiro (neste caso não é .txt mas sim .log) que tenho como base da importação está com linhas separadas por quebra de linha e o texto separado por barra invertida (ex.: C:\pasta1\pasta2\pasta3\...).

Obrigado e cumprimentos

CAparicio

<?php
//Conexão MySql
$host = "localhost";
$user = "root";
$password = "";
$db = "radiotagide";
$tabela = "logemissao1";
$conexao = mysqli_connect($host,$user,$password,$db);
if (!$conexao)
die ("Erro de conexão com localhost, o seguinte erro ocorreu -> ".mysqli_error());

$dia = date('d')-1;
$mes = date('m');
$ano = date('Y');
$data =("$ano-$mes-$dia").'.log';
$arquivo = file ('Z:/logzara/log/'.$data);

function ret_acent($arquivo){
$ant=$arquivo;
$arquivo = str_replace("~1","",$arquivo);
$arquivo = str_replace("'","´",$arquivo);
$arquivo = str_replace("Jingles_NoAr","",$arquivo);
$arquivo = str_replace("Jingles_entre_musicas","",$arquivo);
$arquivo = str_replace("Sinal_Horario_NoAr","",$arquivo);
$arquivo = str_replace("Pasta_IPs","",$arquivo);
$arquivo = str_replace("IPs","",$arquivo);
$arquivo = str_replace("Publicidade_NoAr","",$arquivo);
$arquivo = str_replace("Sinais_Horarios","",$arquivo);
$arquivo = str_replace(")","",$arquivo);
return $arquivo;
}
$linhas  = count($arquivo);
for ($i = 7; $i < ($linhas); $i++) {
$arquivo0 = ($arquivo[$i]);
$linhas1 = ret_acent(preg_split("'\\\\'",$arquivo0));
$linhas2 = preg_split("'-'",$linhas1[4]);

//Ecrã
echo ("$ano-$mes-$dia<br>");
echo substr("$linhas1[0]<br>",0,-14);
echo ("<br>$linhas1[1]<br>");
echo ("$linhas1[2]<br>");
echo ("$linhas1[3]<br>");
echo ("$linhas1[4]<br>");
echo ("$linhas2[0]<br>");
echo ("$linhas2[1]<br>");

//Mysql
$data =("$ano-$mes-$dia");
$hora =substr("$linhas1[0]",0,-10);
$classe =("$linhas1[1]");
$idioma1 =("$linhas1[2]");
$idioma2 =("$linhas1[3]");
$ficheiro =("$linhas1[4]");
$artista =("$linhas2[0]");
$musica =substr ("$linhas2[1]",0,-6);

$query = "INSERT INTO $tabela ( `data` , `hora` , `classe`, `idioma1`, `idioma2` , `ficheiro`, `artista` , `musica`) VALUES ('$data', '$hora', '$classe', '$idioma1', '$idioma2', '$ficheiro', '$artista', '$musica')"; mysqli_query($conexao, $query);
}
?>

Citar


 

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...