Conversão de Arquivo TXT em PHP

Publicado por jose claudio em 06/05/2011

[ Hits: 14.361 ]

 


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

Entendendo as permissões de arquivos no Linux

Configurando IP estático em uma placa de rede

Configurando IP em uma placa de rede

Upgrade na senha de root

Configurando proxy/cache Squid com autenticação

Leitura recomendada

Colocando o "bcompiler" pra funcionar no PHP5

Enviar aspas em PHP de maneira menos suja

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

FirePHP: Depurador de códigos PHP

Exemplo de conexão ao banco de dados orientada a objeto em PHP+MySQL

  

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