brjuliet 4 Denunciar post Postado Junho 10, 2013 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
shini 318 Denunciar post Postado Junho 10, 2013 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
brjuliet 4 Denunciar post Postado Junho 10, 2013 Mais como faria para percorrer linha por linha? Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Junho 10, 2013 use file() para converter o arquivo ja importado em um array ai é so usar um foreach para extrair os pedaços e gravar no banco. http://php.net/manual/pt_BR/function.file.php Compartilhar este post Link para o post Compartilhar em outros sites
brjuliet 4 Denunciar post Postado Junho 10, 2013 Vou tentar e te aviso obrigada Compartilhar este post Link para o post Compartilhar em outros sites
hufersil 145 Denunciar post Postado Junho 10, 2013 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
Kakashi_Hatake 267 Denunciar post Postado Junho 10, 2013 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
hufersil 145 Denunciar post Postado Junho 10, 2013 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
shini 318 Denunciar post Postado Junho 10, 2013 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
brjuliet 4 Denunciar post Postado Junho 10, 2013 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
Kakashi_Hatake 267 Denunciar post Postado Junho 10, 2013 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
brjuliet 4 Denunciar post Postado Junho 10, 2013 Mais uma duvida tem como eu pegar a primeira Data e a Ultima Data ? Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 10, 2013 $first = reset( $contents ); $last = end( $contents ); var_dump( $first[ 'data' ], $last[ 'data' ] ); :closedeyes: Compartilhar este post Link para o post Compartilhar em outros sites
brjuliet 4 Denunciar post Postado Junho 11, 2013 Obrigada Carlos Coelho muito obrigada! Obrigada a todos que estavam me ajudando... Compartilhar este post Link para o post Compartilhar em outros sites
Rocalbar 0 Denunciar post Postado Junho 11, 2013 Pessoal tenho a mesma dúvida da brjuliet, mas os meus dados esta em uma variável $exemplo, o princípio é o mesmo? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Kakashi_Hatake 267 Denunciar post Postado Junho 11, 2013 Amigo, poste sua dúvida em um novo tópico juntamente com o script. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites