Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jeff Silva

Ler arquivo TXT e grava alguns dados no MySQL

Recommended Posts

Olá Pessoal, sou novato em programção em PHP. Já faz alguns dia que estou pesquisando uma solução para meu problema, até já encontrei uma forma de ler um arquivo TXT com PHP, mas estou tendo muita dificuldade em gravar estes registros no MySQL.

É o seguinte, tenho um arquivo TXT com 464 colunas, mas preciso somente de alguns conjuntos destas colunas. Segue um exemplo:

00000018140702Depto 00000001PRODUÇÃO 0000000123898 22869 00000001Salario 00000001Salário 31/07/2014000000000004036287

 

Isto é somente 1 linha do meu arquivo.

Eu preciso pegar somente alguns dados, por exemplo, da coluna 397, preciso somente de 8 caracteres, da coluna 405 mais 30, da coluna 435 somente 10. Eu até encontrei um código de um coléga aqui do fórum (Carlos Coelho) e estou conseguindo exibir na tela as informações que preciso, mas estou com muita dificuldade em gravar estes registros no banco. Segue o código:

$arquivo = "/home/developer/ContWcont/MATRIZ0714.TXT";
$handle = fopen( $arquivo, 'r' );
while( ! feof( $handle ) )
{
$content = trim( fgets( $handle ));
$temp[ 'data' ] = substr( $content, 435, 10 );
$temp[ 'descevent' ] = substr( $content, 405, 30 );
$temp[ 'evento' ] = substr( $content, 397, 8 );
$temp[ 'valor' ] = substr( $content, 453, 10 );
$contents [ ] = $temp;
}
fclose( $handle ); //fechar o arquivo que foi realizado a leitura
var_dump( $contents ); //exibe a informação lida do arquivo
?>
</html>

No banco eu tenho os campos data, descevent, evento e valor aonde serão armazenados todos os dados.

Alguém pode me dar uma dica??

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma maneira fácil de resolver seu problema, alterando apenas a forma como armazena os valores na array $contents.

 

Crie o SQL parcial com apenas os valores que serão gravados.

 

Veja:

$arquivo = '/home/developer/ContWcont/MATRIZ0714.TXT';
$handle = fopen( $arquivo, 'r' );

while( ! feof( $handle ) ) 
{
    $content = trim( fgets( $handle ) );
    $contents[ ] = sprintf( '( "%s", "%s", "%s", "%s" )', 
    substr( $content, 435, 10 ), substr( $content, 405, 30 ), substr( $content, 397, 8 ), substr( $content, 453, 10 ) );

}

fclose( $handle ); 

Depois fora do loop, você completa a instrução SQL.

$sql = sprintf( 'INSERT INTO `table` ( `data`, `descevent`, `evento`, `valor` ) VALUES %s', implode( ', ', $contents ) );

var_dump( $sql );

Após isso, é só executar a o SQL para inserir os dados no banco de dados, lembrando que o SQL está pronto para executar, não sendo necessário nenhuma alteração.

 

Um exemplo de como ficaria

INSERT INTO `table` ( `data`, `descevent`, `evento`, `valor` ) VALUES ( "5678901234", "567890123456789012345678901234", "45678901", "5678901234" ), ( "5678901234", "567890123456789012345678901234", "45678901", "5678901234" )

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Uma maneira fácil de resolver seu problema, alterando apenas a forma como armazena os valores na array $contents.

 

Crie o SQL parcial com apenas os valores que serão gravados.

 

Veja:

$arquivo = '/home/developer/ContWcont/MATRIZ0714.TXT';
$handle = fopen( $arquivo, 'r' );

while( ! feof( $handle ) ) 
{
    $content = trim( fgets( $handle ) );
    $contents[ ] = sprintf( '( "%s", "%s", "%s", "%s" )', 
    substr( $content, 435, 10 ), substr( $content, 405, 30 ), substr( $content, 397, 8 ), substr( $content, 453, 10 ) );

}

fclose( $handle ); 

Depois fora do loop, você completa a instrução SQL.

$sql = sprintf( 'INSERT INTO `table` ( `data`, `descevent`, `evento`, `valor` ) VALUES %s', implode( ', ', $contents ) );

var_dump( $sql );

Após isso, é só executar a o SQL para inserir os dados no banco de dados, lembrando que o SQL está pronto para executar, não sendo necessário nenhuma alteração.

 

Um exemplo de como ficaria

INSERT INTO `table` ( `data`, `descevent`, `evento`, `valor` ) VALUES ( "5678901234", "567890123456789012345678901234", "45678901", "5678901234" ), ( "5678901234", "567890123456789012345678901234", "45678901", "5678901234" )

Carlos Coelho, sou seu fa!!!

Deu certinho, acrescentei apenas uma linha antes do var_dump( $sql );

$q = mysql_query($sql, $conexao);

Esta muito corrido na empresa e só tive tempo de fazer os testes com sua dica hoje.

Ao amigo marcelobbt, muito obrigado também pela dica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.