Aldeia Numaboa
Um portal diferente em Português do Brasil
Informática da Aldeia

Tutoriais
Home Informática Tutoriais e Programação Perl e CGI Linguagem Perl - Leitura e Escrita de Arquivos

Na Aldeia

Há 106 visitantes online

3630 registros
0 hoje
14 nesta semana
4 neste mês

Boas vindas: flor

Estatística

Membros: 3639
Artigos: 1045
Links: 90
Leituras: 6681043

Login



Kanji da hora




Faça contato






Sex

21

Nov

2008


15:08

Linguagem Perl - Leitura e Escrita de Arquivos PDF Imprimir Indique esta página
(3 votos, média 3.3 de 5)
Escrito por vovó Vicki   


Índice do Artigo
Linguagem Perl - Leitura e Escrita de Arquivos
Escrita de arquivos
Todas as páginas

A linguagem Perl permite abrir e fechar arquivos, tanto para a leitura quanto para a escrita. Neste tutorial serão dadas as bases para realizar estas operações.

Abrir e Fechar Arquivos

Com scripts Perl é possível administrar arquivos. Associados a scripts CGI, pode-se ler e escrever arquivos no servidor. As aplicações mais conhecidas de CGI, como contadores de acesso ou livros de visita, utilizam-se desta possibilidade.

Cada arquivo que deva ser lido ou receber dados (ser escrito) através de um script Perl, precisa antes ser aberto. Após a leitura ou a escrita, os arquivos deveriam ser fechados novamente. Veja alguns exemplos a seguir:

#!/usr/bin/perl
 
open(ARQUIVONOTICIA, "<news.txt"); # Abrir arquivo para leitura
close(ARQUIVONOTICIA);
 
open(ARQUIVONOTICIA, ">news.txt"); # Abrir arquivo para escrita
close(ARQUIVONOTICIA);
 
open(ARQUIVONOTICIA, ">>news.txt"); # Abrir arquivo para escrita complementar
close(ARQUIVONOTICIA);
 
if(open(ARQCONTA, "<counter/counter.dat") == false)
{ print "Arquivo Contador não encontrado\n"; }
 
open(ARQCONTA, "<counter/counter.dat") || die "Arquivo Contador não encontrado\n";

Um arquivo é aberto com a função Perl open. Esta função requer dois parâmetros.

O primeiro parâmetro é um manipulador (handler) de arquivo. O handler é um nome que o arquivo aberto recebe e que serve para referenciá-lo (não é o nome próprio do arquivo, é uma espécie de apelido). Este nome é de livre escolha. Costuma-se usar apenas letras maiúsculas para nomes de handlers. Nos exemplos acima, os handlers são ARQUIVONOTICIA e ARQCONTA.

O segundo parâmetro exigido é o nome do arquivo que deve ser aberto. Se o arquivo em questão estiver num diretório diferente do diretório onde está o script, é preciso indicá-lo.

Antes do nome do arquivo (ou do diretório/nome do arquivo) indica-se, através de caracteres especiais, qual o modo de abertura que deve ser utilizado:

  • >arquivo.dat significa: abrir arquivo.dat para escrita. Se o arquivo já existir, seu conteúdo é substituído pelo novo. Caso não exista, um novo arquivo é criado.
  • >>arquivo.dat significa: abrir arquivo.dat para escrita. Se o arquivo já existir, o novo conteúdo é adicionado, isto é, o conteúdo antigo não é eliminado. Caso não exista, um novo arquivo é criado.
  • +>arquivo.dat significa: abrir arquivo.dat para leitura e escrita.
  • |procura.exe significa: o arquivo procura.exe é um programa executável. O programa é aberto para poder ser executado.

Faz parte de uma boa programação rastrear possíveis erros na abertura de arquivos e tratá-los no script Perl. Os dois últimos exemplos mostram construções de diretivas para reagirem a esses possíveis erros. O penúltimo exemplo trabalha com uma diretiva condicional que, caso ocorra um erro, mostra uma mensagem de erro com a ajuda da função print. O último exemplo faz uso de uma condição lógica OU (OR) que o interpretador Perl avalia. Inicialmente é avaliada a primeira parte da expressão (na frente do operador lógico ||). Este é o comando para abrir o arquivo. Se o arquivo for aberto com sucesso, a função open devolve o valor "verdadeiro" tornando toda a expressão lógica verdadeira. Se o arquivo não puder ser aberto, então a segunda parte da expressão é avaliada. Neste caso, através da função die (die = morrer), o texto indicado é mostrado e o script é interrompido. O texto da função die é opcional.

Leitura de Arquivos

Existem diversas possibilidades de leitura de arquivos. O tipo de leitura depende das tarefas que o script Perl deve executar. A premissa para a leitura de arquivos é que os arquivos estejam abertos para leitura.

Exemplo 1 - Leitura de arquivo linha por linha:

#!/usr/bin/perl
 
@Linhas = ("");
open(DADOSMAIL, "<inbox.dat") || die "Arquivo com E-Mails não encontrado\n";
while(<DADOSMAIL>) {
   push(@Linhas,$_);
}
close(DADOSMAIL);
 
for(@Linhas) {
   if(/<a class="mosinfopop" style="cursor:help;border-bottom:1px dotted #000000;" href="javascript:void(0)" onmouseover="return overlib('<p>HyperText Markup Language, que significa Linguagem de Marcação de Hipertexto. É usada para criar páginas web.</p>&amp;nbsp;<br />', CAPTION, 'HTML',BELOW,RIGHT, WIDTH, 300, FGCOLOR, '#CCCCFF', BGCOLOR, '#333399', TEXTCOLOR, '#000000', CAPCOLOR, '#FFFFFF', OFFSETX, 10, OFFSETY, 10);" onmouseout="return nd();" > HTML</a>/) {
      print $_;
   }
}

Exemplo 2 - Leitura de arquivo caracter por caracter:

#!/usr/bin/perl
 
@Vogais = ("a","e","i","o","u");
@Frequencia = (0,0,0,0,0);
 
open(DADOS, "<$ARGV[0]") || die "$_[1] não encontrado\n";
while(($CaracterAtual = getc(DADOS)) ne "") {
   for($i=0;$i<=4;++$i) {
      if($CaracterAtual eq $Vogais[$i]) {
         $Frequencia[$i]++;
      }
   }
}
 
close(DADOS);
for($i=0;$i<=4;++$i) {
   print "$Vogais[$i] aparece $Frequencia[$i] vezes em $ARGV[0]\n";
}

O padrão de leitura de arquivos em Perl é a leitura linha por linha, como no exemplo 1. Isto funciona com todos os arquivos que possam ser lidos com facilidade por um editor de texto portanto, funciona para todo tipo de arquivo de texto, arquivos de configuração ou arquivos de dados estruturados em linhas e com delimitadores para os campos. Para este tipo de leitura nem existe um comando especial em Perl. Utiliza-se apenas um loop while com a sintaxe while() onde HANDLERDOARQUIVO é o nome atribuído na ocasião do open. No interior do loop pode-se obter a linha atual através da variável predefinida $_. Para manter os dados na memória, visando um processamento posterior, é possível armazenar as linhas numa matriz ou lista (como no exemplo 1).

Arquivos binários, ou seja, arquivos com formatos de programas específicos e que contenham valores numéricos e caracteres especiais, adaptam-se melhor a uma leitura caractere por caractere (como no exemplo 2). A função de leitura de caracteres de um arquivo é a getc. Esta função devolve o último caractere lido, o qual pode ser armazenado numa variável. Quando se atinge o final do arquivo, esta função devolve um caractere vazio (hexadecimal 0). É por este motivo que, no exemplo 2, se utiliza o operador relacional ne "" como condição para terminar o loop while.

Info Observação: O exemplo 2 mostra também como se pode ler um arquivo cujo nome é enviado através de um parâmetro. Os argumentos repassados ao script ficam armazenados na variável predefinida @ARGV.



Última atualização ( Sex, 21.11.2008 17:02 )
 

Topo

Topo

Exceto onde especificamente citado, todo material deste site está sob Licença Creative Commons