Ir para conteúdo

POWERED BY:

Arquivado

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

brjuliet

Ler TXT e gravar no banco

Recommended Posts

Bom dia, tenho um arquivo txt chamado ponto, preciso ler este arquivo e gravar no banco Mysql o arquivo é o seguinte.

 

0000681843270520131209012883895246
0000682753270520131300012883895246
0000684083270520131820012883895246
0000685503280520130716012883895246

Preciso gravar no banco

 

Código - 000068184

Dígito - 3

Data - 27052013

Hora - 12:09

Pis - 2147483647

 

Alguém pode me ajudar?

 

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

se a posição é sempre a mesma vc pode usar substr() ou usar expressões regulares

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lembre-se que a função file carregará o conteúdo inteiro do arquivo em um array na memória, o que poderá acarretar problemas se o arquivo for muito grande.

 

Para estes casos, em que não sei exatamente o tamanho que pode ser, utilizo fopen e leio linha a linha

 

$fp = fopen('arquivo.txt');

while( !feof($fp) ){
	$linha = trim(fgets($fp));
	// faz o tratamento
}

fclose($fp);

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Era exatamente o que eu ia dizer :yes:

Lembre-se que a função file carregará o conteúdo inteiro do arquivo em um array na memória, o que poderá acarretar problemas se o arquivo for muito grande.

 

Já que me dei ao "trabalho" de elaborar a resposta, agora vou postar :closedeyes:

$handle = fopen( 'file.txt', 'r' );

while( ! feof( $handle ) )
{
    $content          = trim( fgets( $handle ) );
    $temp[ 'codigo' ] = substr( $content, 0, 9 ); 
    $temp[ 'digito' ] = substr( $content, 9, 1 ); 
    $temp[ 'data' ]   = preg_replace( '/([0-9]{2})([0-9]{2})([0-9]{4})/', '$1/$2/$3', substr( $content, 10, 8 ) ); 
    $temp[ 'hora' ]   = implode( ':', str_split( substr( $content, 18, 4 ), 2 ) ); 
    $temp[ 'Pis' ]    = substr( $content, 22 ); 
    $contents[ ]      = $temp;
}

fclose( $handle );

var_dump( $contents );

Saída:

 

 

array
  0 => 
    array
      'codigo' => string '000068184' (length=9)
      'digito' => string '3' (length=1)
      'data' => string '27/05/2013' (length=10)
      'hora' => string '12:09' (length=5)
      'Pis' => string '012883895246' (length=12)
  1 => 
    array
      'codigo' => string '000068275' (length=9)
      'digito' => string '3' (length=1)
      'data' => string '27/05/2013' (length=10)
      'hora' => string '13:00' (length=5)
      'Pis' => string '012883895246' (length=12)
  2 => 
    array
      'codigo' => string '000068408' (length=9)
      'digito' => string '3' (length=1)
      'data' => string '27/05/2013' (length=10)
      'hora' => string '18:20' (length=5)
      'Pis' => string '012883895246' (length=12)
  3 => 
    array
      'codigo' => string '000068550' (length=9)
      'digito' => string '3' (length=1)
      'data' => string '28/05/2013' (length=10)
      'hora' => string '07:16' (length=5)
      'Pis' => string '012883895246' (length=12)

 

 

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já que me dei ao "trabalho" de elaborar a resposta, agora vou postar :closedeyes:

 

kkkk tá certo :)

 

eu já gosto mais de ER's.

 

$fp = fopen('ponto.txt','r');
 
while( !feof($fp) ){
	$linha = trim(fgets($fp));
	if( preg_match('@^(?<codigo>\d{9})(?<digito>\d{1})(?<dia>\d{2})(?<mes>\d{2})(?<ano>\d{4})(?<hora>\d{2})(?<minuto>\d{2})(?<pis>\d+)$@', $linha, $match) ) {
		// aqui vc pode processar os itens
		print_r($match);
	}
}
 
fclose($fp);

@braços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

pensando na linha eu resolvi assim

 

 

$texto = '0000681843270520131209012883895246';
$er = '/([0-9]{9})([0-9]{1})([0-9]{8})([0-9]{4})([0-9]{10})/';

preg_match($er, $texto, $ocorrencias);

echo "<pre>";
print_r($ocorrencias);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos fiz como você disse, o arquivo que carrego e o de ponto de uma fabrica inteira então ele é gigante.

 

quando me volta os valor ele m volta o ultimo array assim

 

  17 =>     array (size=5)      'codigo' => boolean false      'digito' => boolean false      'data' => string '' (length=0)      'hora' => string '' (length=0)      'Pis' => boolean false

 

tudo zerado não precisava dele para nada como faço para ele nao me volta o array 17?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso ocorre porque a última linha do arquivo está em branco, basta uma validação.

 

    $content = trim( fgets( $handle ) );
	
    if( ! empty( $content ) )
    {
        $temp[ 'codigo' ] = substr( $content, 0, 9 ); 
        $temp[ 'digito' ] = substr( $content, 9, 1 ); 
        $temp[ 'data' ]   = preg_replace( '/([0-9]{2})([0-9]{2})([0-9]{4})/', '$1/$2/$3', substr( $content, 10, 8 ) ); 
        $temp[ 'hora' ]   = implode( ':', str_split( substr( $content, 18, 4 ), 2 ) );            $temp[ 'Pis' ]    = substr( $content, 22 ); 
        $contents[ ]      = $temp;
    }

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.