30% OFF para compra e renovaÇÃo »

Autor Tópico: RESOLVIDO insert atraves de txt com remoção de linhas e caracteres indesejaves  (Lida 727 vezes)

inaciofuhr

  • Novato
  • *
  • Mensagens: 34
    • Email
Olá
no tópico abaixo mostra como inserir dados no banco de dados com dados vindos de um arquivo txt. Gostaria de ajuda para implementar para ignorar a primeira linha (abeçalho do arquivo) para importação a partir da segunda linha
att


http://www.scriptcase.com.br/forum/index.php/topic,15959.msg84147.html#msg84147
« Última modificação: Fevereiro 11, 2018, 07:52:45 am por inaciofuhr »

Haroldo

  • Expert
  • *****
  • Mensagens: 8555
  • Conhecimento diminui limitações.△TFA△
    • InfinitusWeb Software de Gestãol/Gestão ITIL/Consultoria Scriptcase
« Última modificação: Fevereiro 08, 2018, 06:25:21 am por Haroldo »

inaciofuhr

  • Novato
  • *
  • Mensagens: 34
    • Email
Re:insert atraves de txt
« Responder #2 Online: Fevereiro 10, 2018, 06:45:06 am »
Haroldo e demais
pesquisei e tentei de várias maneiras resolver, mas não sei onde estou errando
segue abaixo codigo, se alguem puder me ajudar, agradeço.

// SQL setando parametros
$delete_table  = 'ppr_anual';      // Table name
$delete_where  = "cliente_id = '{cliente}' AND ppr_ano = '{ppr_ano}'"; // Where clause

// Deletando registros
$delete_sql = 'DELETE FROM ' . $delete_table
    . ' WHERE '      . $delete_where;
sc_exec_sql($delete_sql);

$pathFile     =  $this->Ini->path_doc . "/" . {arquivo};

$arquivo = fopen($pathFile , 'r+');
//$cabecalho = "aaaaaa;";
if ($arquivo == false) die('Não foi possível abrir o arquivo.');

while(!feof($arquivo)) {
   
   $linha = fgets($arquivo); // LÊ CADA LINHA
   //$qtlines = count($linhas);
   //   $remover_cabecalho = unset($qtlines[0]);
   
   $l = 0 ;
foreach( $linha as $linha2 ) {
   if ( $l >= 1 ) {
      echo $linha2;
   
   
   $dados = explode(";",$linha2);
   
   
      $campo1 = $dados[0];
      $campo2 = $dados[1];
      $campo3 = $dados[2];
      $campo4 = $dados[3];
      $campo5 = $dados[4];
      $campo6 = $dados[5];
      $campo7 = $dados[6];
      $campo8 = $dados[7];
      $campo9 = $dados[8];
      $campo10 = $dados[9];
      $campo11 = $dados[10];
      $campo12 = $dados[11];
      $campo13 = $dados[12];
      $campo14 = $dados[13];
      $campo15 = $dados[14];
      $campo16 = $dados[15];
      $campo17 = $dados[16];
      $campo18 = $dados[17];
      $campo19 = $dados[18];
      
      
$data = $campo9;
$dia = substr($data, 0, 2);
$mes = substr($data, 3, 2);
$ano = substr($data, 6, 4);
$campo9_gravar = $ano."-".$mes."-".$dia;
   
   
   $ppr_valor_bruto = floatval(str_replace(',', '.', str_replace('.', '', $campo6)));
   
   $ppr_total_nfe = floatval(str_replace(',', '.', str_replace('.', '', $campo17)));
   
   $ppr_quantidade = floatval(str_replace(',', '.', str_replace('.', '', $campo4)));

   
   //echo "<br>$campo4_gravar";
   
   echo $teste = sc_exec_sql("INSERT into ppr_anual(ppr_ncm, ppr_descricao, ppr_cfop, ppr_quantidade, ppr_unidade, ppr_valor_bruto, ppr_opracao_nfe, ppr_situacao_nfe, ppr_data_nfe, ppr_ie_emitente, ppr_uf_emitente, ppr_ie_destinatario, ppr_uf_destino, ppr_modelo_df, ppr_serie_nfe, ppr_nfe, ppr_total_nfe, ppr_situacao_aim, ppr_chave_acesso, ppr_ano, cliente_id, ppr_ncm2, ppr_data_lancamento) VALUES ('$campo1', '$campo2', '$campo3', '$ppr_quantidade', '$campo5',  '$ppr_valor_bruto',  '$campo7',  '$campo8',  '$campo9_gravar',  '$campo10',  '$campo11',  '$campo12',  '$campo13',  '$campo14',  '$campo15',  '$campo16',  '$ppr_total_nfe',  '$campo18',  '$campo19','{ppr_ano}',
   '{cliente}','$campo1', '{data_lancamento}')"); //INSERE CADA LINHA

   ++$l ;
   }
      
}

if($teste == true){
      echo"Sucesso";}
   else{
      echo"Erro";}

fclose($arquivo);
« Última modificação: Fevereiro 11, 2018, 07:53:57 am por inaciofuhr »

inaciofuhr

  • Novato
  • *
  • Mensagens: 34
    • Email
Re:insert atraves de txt
« Responder #3 Online: Fevereiro 10, 2018, 10:39:22 pm »
Consegui ignorar a primeira linha e dar o insert a partir da segunda linha separando por colunas.
Agora a dificuldade é outra, não estou conseguindo eliminar a ultima linha se ela for vazia, já tentei usar TRIM, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES e UNSET

inaciofuhr

  • Novato
  • *
  • Mensagens: 34
    • Email
Re:insert atraves de txt
« Responder #4 Online: Fevereiro 11, 2018, 07:49:50 am »
Bom dia!
Consegui resolver tudo q eu queria:
Ignorar primeira linha (cabeçalho) no txt;
Ignorar a linha vazia (branco) no final do txt;
remover (substituir) caracteres não desejáveis ou q causavam erro na importação.

Sou iniciante no php e scriptcase, vou postar o código caso alguém tenha alguma sugestão para contribuir,
se alguém puder contribuir como eu pego o txt de um arquivo zipado, agradeço.

Abraços


/**
 *DELETANDO DADOS DA TABELA
 */

// SQL setando parametros
$delete_table  = 'anual';      // Table name
$delete_where  = "cliente_id = '{cliente}' AND ano = '{ano}'"; // Where clause

// Deletando registros
$delete_sql = 'DELETE FROM ' . $delete_table
    . ' WHERE '      . $delete_where;
sc_exec_sql($delete_sql);

// ATÉ AQUI CÓDIGO PARA LIMPAR TABELA

// INICIO DO CÓDIGO PARA IMPORTAR TXT

$pathFile     =  $this->Ini->path_doc . "/" . {arquivo};


$arquivo = fopen($pathFile , 'r');


if ($arquivo == false) die('Não foi possível abrir o arquivo.');

{    // IF PARA SEPARAR CABEÇALHO (PRIMEIRA LINHA) DO RESTANTE
   
     // Lê o conteúdo do arquivo
    $cabecalho = fgets($arquivo, 1024);
    //echo $cabecalho.'<br />';
   
   
   { // LER RESTANTE DO ARQUIVO
   
   
while(!feof($arquivo)) {
   
   
      
   $linha = fgets($arquivo); // LÊ CADA LINHA
      
   if(strlen(trim($linha)) > 0) {  //RETIRA A LINHA EM BRANCO
      
      //Separa as colunas
        $dados = explode(";", $linha);
   
      $campo1 = str_replace("'","",$dados[0]); //RETIRA O ' DA COLUNA
      $campo2 = str_replace("'","",$dados[1]);
      $campo3 = str_replace("'","",$dados[2]);
      $campo4 = str_replace("'","",$dados[3]);
      $campo5 = str_replace("'","",$dados[4]);
      $campo6 = str_replace("'","",$dados[5]);
      $campo7 = str_replace("'","",$dados[6]);
      $campo8 = str_replace("'","",$dados[7]);
      $campo9 = str_replace("'","",$dados[8]);
      $campo10 = str_replace("'","",$dados[9]);
      $campo11 = str_replace("'","",$dados[10]);
      $campo12 = str_replace("'","",$dados[11]);
      $campo13 = str_replace("'","",$dados[12]);
      $campo14 = str_replace("'","",$dados[13]);
      $campo15 = str_replace("'","",$dados[14]);
      $campo16 = str_replace("'","",$dados[15]);
      $campo17 = str_replace("'","",$dados[16]);
      $campo18 = str_replace("'","",$dados[17]);
      $campo19 = str_replace("'","",$dados[18]);
         

// ARRUMANDO A DATA PARA GRAVAR NO BANCO POSTGRES
$data = $campo9;
$dia = substr($data, 0, 2);
$mes = substr($data, 3, 2);
$ano = substr($data, 6, 4);
$campo9_gravar = $ano."-".$mes."-".$dia;
      

        // SUBSTITUINDO A VIRGULA POR PONTO PARA CAMPO NUMERICO PARA GRAVAR NO BANCO CORRETAMENTE
   $valor_bruto = floatval(str_replace(',', '.', str_replace('.', '', $campo6)));
   $total_nfe = floatval(str_replace(',', '.', str_replace('.', '', $campo17)));
   $quantidade = floatval(str_replace(',', '.', str_replace('.', '', $campo4)));
   
   //echo
   $inserir = sc_exec_sql("INSERT into anual(ncm, descricao, cfop, quantidade, unidade, valor_bruto, opracao_nfe, situacao_nfe, data_nfe, ie_emitente, uf_emitente, ie_destinatario, uf_destino, modelo_df, serie_nfe, nfe, total_nfe, situacao_aim, chave_acesso, ano, cliente_id, ncm2, data_lancamento) VALUES ('$campo1', '$campo2', '$campo3', '$quantidade', '$campo5',  '$valor_bruto',  '$campo7',  '$campo8',  '$campo9_gravar',  '$campo10',  '$campo11',  '$campo12',  '$campo13',  '$campo14',  '$campo15',  '$campo16',  '$total_nfe',  '$campo18',  '$campo19','{ano}',
   '{cliente}','$campo1', '{data_lancamento}')"); //INSERE CADA LINHA

         } // FECHA REMOÇÃO DA LINHA EM BRANCO
      
} //FECHA WHILE
}

if($inserir == true){
      echo"Sucesso";}
   else{
      echo"Erro";}
}
fclose($arquivo);
« Última modificação: Fevereiro 11, 2018, 09:52:58 am por inaciofuhr »