Ir ao conteúdo

Posts recomendados

Postado

Galera, estou tentando pegar de um arquivo TXT, 4 informações que cada linha dele da e gravar numa tabela do banco de dados, e esta dando erro e já mexi e remexi e não sei porque nao da certo, alguem poderias me ajudar?

processa.php

<?php
session_start();

//Incluir a conexao com BD
include_once("conexao.php");

//Receber os dados do formulário
//$arquivo = $_FILES['arquivo'];
//var_dump($arquivo);
$arquivo_tmp = $_FILES['arquivo']['tmp_name'];

//ler todo o arquivo para um array
$dados = file($arquivo_tmp);
//var_dump($dados);

                    $line = fgets($dados);

                   for($x=0; $x<0; $x++) {
                        $line = fgets($dados);
                    }
                    $ArrayRetornogru = array();
                    echo "dados".$dados;
                    echo "line". $line;
                    break;
                    
                    
                    while ($line = fgets($dados)) {
                                
                            $data_vencto = substr($line, 56,8);
                            $data_pago = substr($line, 101,8);
                            $valor          = substr($line, 122,4);
                            $cpf  = substr($line, 256,11);
                            // captar as 3 variaveis e fazer a busca das inscricoes pelo cpf data e valor
                            echo $data_pago;
                            echo $data_vencto;
                            echo $valor;

                        $nbr_cpf = $cpf;

                        $parte_um     = substr($nbr_cpf, 0, 3);
                        $parte_dois   = substr($nbr_cpf, 3, 3);
                        $parte_tres   = substr($nbr_cpf, 6, 3);
                        $parte_quatro = substr($nbr_cpf, 9, 2);

                        $monta_cpf = "$parte_um.$parte_dois.$parte_tres-$parte_quatro";

                        echo $monta_cpf;

                         $ArrayRetornogru[] = $monta_cpf;
                             
                                echo "<pre>";
                                    print_r($ArrayRetornogru);
                                echo "</pre>";
                                echo "TESTE";
                                
                    }
                    fclose($dados);
                    print_r($ArrayRetornogru);
                    echo "teste 2";
                    break;
                    
                    
foreach($dados as $linha){
    $linha = trim($linha);
    $valor = explode(',', $linha);
    var_dump($valor);
    
    $data_vencto = $ArrayRetornogru[0];
    $data_pago = $ArrayRetornogru[1];
    $valor = $ArrayRetornogru[2];
    $cpf = $ArrayRetornogru[3];
    
    $result_usuario = "INSERT INTO gru_concurso (data_vencto, data_pago, valor, cpf) VALUES ('$data_vencto', '$data_pago', '$valor', '$cpf')";
    
    $resultado_usuario = mysqli_query($conn, $result_usuario);    
}
$_SESSION['msg'] = "<p style='color: green;'>Carregado os dados com sucesso!</p>";
header("Location: index.php");

ARQUIVO TXT:

image.thumb.png.1dfcda85ef8e00635adf5ca8d6c5c4a3.png

 

de cada linha eu preciso tirar as informações datavencto, datapago, valor, cpf e gravar numa tabela a parte.

 

falou galera !!!

image.png

Postado

Seu problema então está ao fazer o parser no txt para string. Teria como postar esse text aqui e dizer quais as posições estão as informações?

Postado

1)7777777777720181011I20181010158121264102158121264102890 011102018 0000000000009554100000000000000000185 091020180000000000000150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 1500 0010010329000000000000001000 1011834669500000000000000000001A27CA74C500908CF                                    
2)7777777777720181011I20181010158121264102158121264102890011102018000000000000955410000000000000000018409102018000000000000015000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015000010010329000000000000001000057040671400000000000000000000123AD3C3D2B3FBAC8                                    
3)7777777777720181011I201810101581212641021581212641028900111020180000000000009554100000000000000000183091020180000000000000150000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000150000100103290000000000000010001734749660800000000000000000001147859144416F6B1                                    
4)7777777777720181011I2018101015812126410215812126410289001110201800000000000095541000000000000000001820910201800000000000001500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001500001001032900000000000000100016214304642000000000000000000010319728433E8EBB5

QUATRO LINHAS DO ARQUIVO TXT, na 1) linha de exemplo, coloquei em negrito as infomacoes que preciso extrair..

e elas estão as seguintes posições no arquivo:
$data_vencto = substr($line, 56,8);
$data_pago = substr($line, 101,8);
$valor          = substr($line, 122,4);
$cpf  = substr($line, 256,11);

 

Obrigado

adicionado 6 minutos depois

segue o arquivo TXT, Alfrad para você olhrar.

gruretornobco.txt

Postado
function mask($val, $mask) {
    $maskared = '';
    $k = 0;
    for($i = 0; $i<=strlen($mask)-1; $i++) {
         if($mask[$i] == '#') {
             if(isset($val[$k]))
                 $maskared .= $val[$k++];
             } else {
                 if(isset($mask[$i]))
                     $maskared .= $mask[$i];
             }
     }
    return $maskared;
}
                                    
$cnpj = "11222333000199";
$cpf = "00100200300";
$cep = "08665110";
$data = "10102010";

echo mask($cnpj,'##.###.###/####-##');
echo mask($cpf,'###.###.###-##');
echo mask($cep,'#####-###');
echo mask($data,'##/##/####');

Você consegue usar essa função para formatar seu CPF.

adicionado 7 minutos depois

Pelo o que eu percebi no seu código, você não está guardando os valores no primeiro while de $data_vencto, $data_pago, $valor e $cpf, e no for você está pegando valores que não existem no $ArrayRetornogru.

adicionado 13 minutos depois

A logica é essa, percorre linha por linha, faz o split nas 4 variáveis, formata quem deve ser formatada e persiste (salva no banco de dados). Não existe necessidade para mais 1 laço (for/while).

Postado

Consegui resolver (rsrsrs), o codigo ficou assim, obrigado pela ajuda ALFRAD.

<?php
session_start();

//Incluir a conexao com BD
include_once("conexao.php");

//Receber os dados do formulário
//$arquivo = $_FILES['arquivo'];
//var_dump($arquivo);
$arquivo_tmp = $_FILES['arquivo']['tmp_name'];

//ler todo o arquivo para um array
$dados = file($arquivo_tmp);
//var_dump($dados);

                    
foreach($dados as $linha){
    $linha = trim($linha);
    $valor = explode(',', $linha);

    $data_vencto = substr($linha, 11,8);
    $vcto = substr($data_vencto,0,4)."-".substr($data_vencto,4,2)."-".substr($data_vencto,6,2);
    
    $data_pago = substr($linha, 20,8);
    $pago = substr($data_pago,0,4)."-".substr($data_pago,4,2)."-".substr($data_pago,6,2);    

    $valor = substr($linha, 122,4);
    $nbr_valor = $valor;
    $parte_um     = substr($nbr_valor, 0, 2);
    $parte_dois  = substr($nbr_valor, 2, 2);
    $monta_valor = "$parte_um.$parte_dois";
    $cpf  = substr($linha, 256,11);
    $parte_um     = substr($cpf, 0, 3);
    $parte_dois   = substr($cpf, 3, 3);
    $parte_tres   = substr($cpf, 6, 3);
    $parte_quatro = substr($cpf, 9, 2);

    $monta_cpf = "$parte_um.$parte_dois.$parte_tres-$parte_quatro";        

    $result_usuario = "INSERT INTO gru_concurso (data_vencto, data_pago, valor, cpf) VALUES ('$vcto', '$pago', '$monta_valor', '$monta_cpf')";
    
    //echo "SQL".$result_usuario;
    $resultado_usuario = mysqli_query($conn, $result_usuario);    
}
$_SESSION['msg'] = "<p style='color: green;'>Carregado os dados com sucesso!</p>";
header("Location: index.php");

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...