Conversão de Arquivo TXT em PHP

Publicado por jose claudio em 06/05/2011

[ Hits: 14.956 ]

 


Conversão de Arquivo TXT em PHP



Vai uma boa dica para quem quer converter um arquivo TXT e jogar a saída em outro formato, linguagem desenvolvida PHP.

Esta dica é muito útil quando se quer ler um arquivo TXT e converter sua saída mudando todo seu corpo.

Como exemplo de utilização podemos citar: ERP, bilhetagem, relatórios, etc.

HTML que pegará o arquivo de origem:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
  body { background-color: #EEE; }
  label { display: block; float: left; width: 200px; }
  fieldset { border: 0px; }
</style>
</head>

<body>
<h1>Conversor de arquivo texto</h1>
<form name="file_input" enctype="multipart/form-data" action="export.php" 
method="post">
  <?php echo isset($_GET['message']) ? "<h2>{$_GET['message']}</h2>" : ''; ?>
    <fieldset>
      <label for="file_in">Selecione o arquivo</label>
        <input type="file" name="file_in" id="file_in" value=""/>
    </fieldset>
    <fieldset>
      <label for="send_bt"> </label>
        <input type="submit" name="send_bt" id="send_bt" value="Converter"/>
    </fieldset>
</form>
</body>
</html>

PHP que irá ler a origem e gerar o TXT de destino:

<?php
  // Variavel que armazenará as linhas do arquivo a ser gerado
  $retorno = array();
  
  // Valida se foi enviado um arquivo pela pagina index.php
  if(isset($_FILES['file_in']))
  {
    // Armazena as informações do arquivo enviado
    $file = $_FILES['file_in'];
    
    // Verifica se o arquivo enviado existe fisicamente
    if(file_exists($file['tmp_name']))
    {
      // Inclui os cabeçalhos para forçar o download do arquivo gerado
      header("Pragma: public");
      header("Expires: 0");
      header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
      header("Content-Disposition: attachment; filename=\"export-" . 
date('Ymdhis') . ".txt\""); 
      header("Content-Type: application/force-download"); 
      
      // Abre o arquivo criando um cursor na primeira linha
      $fCursor = fopen($file['tmp_name'], 'r');
      
      // Varre o arquivo linha a linha lendo os registros
      while(!feof($fCursor))
      {
        // Pega uma linha do arquivo
        $fLine     = fgets($fCursor, 4096);  
        // Transforma a linha em um vetor separando os campos por dois 
espações
        $fLineArray  = explode(';',  ereg_replace(' [ ]+', ';', 
ereg_replace("(\r|\n)", "", $fLine)));
        
        // Valida se possui a quantidade de campos especificados no 
formato do arquivo
        if(count($fLineArray) == 6)
        {
          // Define a data da ligação
          $dataAntiga  = ereg_replace('[^0-9]', '', $fLineArray[2]);
          $novaData  = substr($dataAntiga, 2, 2) . substr($dataAntiga, 
0, 2) . substr($dataAntiga, 6, 7);

          // Define o código do fornecedor
          $codigoFornecedor= '00422802';     //CODIGO DA 
DIVEO
          //$codigoFornecedor= '00006402';  //CODIGO INTELIG
          
          // DEFINE LOCALIDADE PELO RAMAL
          /*
          - Ramal com dígitos 11 = DF
          - Ramal com dígitos 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 e 
22 = SP
          - Ramal com dígitos 43 = SP
          - Ramal com dígitos 98 = RJ
          */
          $origem = array();
          $origem[11] = 'DF';
          $origem[12] = 'SP';$origem[13] = 'SP';$origem[14] = 
'SP';$origem[15] = 'SP';$origem[16] = 'SP';
          $origem[17] = 'SP';$origem[18] = 'SP';$origem[19] = 
'SP';$origem[20] = 'SP';$origem[21] = 'SP';
          $origem[22] = 'SP';$origem[43] = 'SP';
          $origem[98] = 'RJ';
          $dgOrigem = substr($fLineArray[4], 0, 2) * 1;
          
          
          // MONTA O REGISTRO REFERENTE A LINHA PARA EXPORTAR 
NO ARQUIVO
          $newLine = array();
          $newLine[] = 'R'; //MOEDA DA DESPESA
          $newLine[] = $novaData; //DATA DA CHAMADA EM FORMATO 
DDMMYY
          $newLine[] = substr($fLineArray[0], 0, 5).'-
'.substr($fLineArray[0], 5, 5); // ACCOUNT CODE UTILIZADO
          $newLine[] = $fLineArray[3]; // DURACAO DA CHAMADA EM 
SEGUNDOS
          $newLine[] = 0;
          $newLine[] = str_replace('.', ',', $fLineArray[5]); // CUSTO DA 
CHAMADA
          $newLine[] = 101; // TIPO DE DESPESA
          $newLine[] = '-'; // CÓDIGO DO TIMEKEEPER
          $newLine[] = $codigoFornecedor; // CÓDIGO DO 
FORNECEDOR
          $newLine[] = isset($origem[$dgOrigem]) ? 
$origem[$dgOrigem] : 'NA'; // LOCALIDADE DE COBRANÇA
          $newLine[] = 'Ligação para:  ' . substr($fLineArray[1], 0, 17) . 
' ,do ramal: ' . $fLineArray[4]; // DESCRIÇÃO DA DESPESA
                  
          // insere um novo nó no vetor com as informações já 
formatadas para exportação
          $retorno[] = implode("\r\n", $newLine);
        }
      }
      
      // Gera o arquivo incluindo uma linha entre os registros
      echo implode("\r\n\r\n", $retorno);
    }
    else
    {
      // Exibe mensagem de erro de arquivo não encontrado
      header("Location: index.php?
message=Erro+ao+ler+o+arquivo,+verifique+o+arquivo+de+origem");  
    }
  }
  else
  {
    // Exibe mensagem de erro para selecionar um arquivo
    header("Location: index.php?message=Selecione+um+arquivo");  
  }




Outras dicas deste autor

Samba como controlador de domínio + PDC

Configurando proxy/cache Squid com autenticação

Configurando IP em uma placa de rede

Configurando alias em placa de rede

Script IP Válidos na rede interna

Leitura recomendada

Populate Object - Aumentando a produtividade de forma bastante simples (PHP + formulário HTML)

Nasce site sobre Zend Framework

Instalação e configuração do fórum phpBB3 no CentOS 7

Integração com PagSeguro no CakePHP 2.x

Escovando bits em PHP: operações bitwise e uma função debug

  

Comentários

Nenhum comentário foi encontrado.



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts