[SP-pm] [Fwd: duvidas]

Andre Carneiro andregarciacarneiro at gmail.com
Thu May 28 12:49:28 PDT 2009


2009/5/28 Luis Motta Campos <luismottacampos at yahoo.co.uk>

> Gente, O Erick Herédia está precisando de uma forcinha... será que vocês
> podem ajudar?
>
> Putamplexos!
>
> -------- Original Message --------
> Subject: duvidas
> Date: Thu, 28 May 2009 12:17:01 -0300
> From: Erick Herédia <andjusticeforall4 at msn.com>
> To: Perl Monks São Paulo <saopaulo-pm-owner at pm.org>
> References: <mailman.3103.1243522554.3331.saopaulo-pm at pm.org>
>
>
>
> Ola, Boa Tarde
>

Boa tarde!


>
>
>
> eu gostaria de saber se voces podem me dar uma maozinha com um
> programinha em perl:
>
> eu estou iniciando na programação em perl, e gostaria de tirar algumas
> duvidas
>
> eu tenho esse codigo que seria de um programa de busca por uma
> respectiva linha em um arquivo dci.
>
> e eu preciso pesquisar por linha, e nao por palavra chave o conteudo do
> edescovery.dci para evitar erros na busca,
>
>
> #!C:/perl/bin/perl.exe
>

Se você instalou o active perl para windows, ele provavelmente configurou
variáveis de ambiente para você. Nesse caso vc pode começar assim:

#! perl


Faltou a linha:

use strict; # isso livra vc de muitas dores de cabeça como variáveis sem
declaração, por exemplo.
use warning; # Isso faz perl te avisar q alguma coisa pode dar errado,
embora a sintaxe esteja correta.


>
> #Handle Area - in - outfile
>
> open FILE, "c:/perl/discoverEdit[1].4796.11.30.5.8.2009" || die "failed
>

Esse jeito de usar a função open não é recomendada. Recomendo que vc use a
função open de 3 parâmetros.
<code>

my $handle = undef;
my $filename = 'c:/perl/discoverEdit[1].4796.11.30.5.8.2009' ;
open $fh,'<',$filename or die "\nErro ao abrir o arquivo $filename - $!";

</code>

# o sinal de '<' significa q o arquivo sera aberto so para leitura.
#repare também que eu usei 'or' ao invés de '||'. Fica mais legível assim, e
é recomendável segundo as boas práticas de programação em Perl.


> @read=<FILE>;
>

Só implemente essa linha acima, se o seu arquivo for realmente muito
pequeno. Caso contrário você pode fazer:

<code>

#$fh é o filehandle que eu sugeri mais acima...
my $line = '';
my $lnumber = 0;#contador de linhas.
while(<$fh>) {
     $line = $_; $_
     if($line =~ m{$keyword}){
          print "\nACHEI! - $lnumber";
     }
     $lnumber++;
}

</code>

Esse while pode ficar mais legível assim:

<code>
.
.
.
$lnumber = 0;
while($line = readline($fh)){
   if($line =~ m{$keyword}){
      print "\nACHEI! - $lnumber";
   }
   $lnumber++;
}
.
.
.
</code>

#readline é uma função do 'core' do Perl. Para saber mais sobre ela, leia a
documentação. Digite na linha de comando: perldoc -f readline
#Porque esse while é mais interessante do que guardar o conteúdo todo num
array? Economia de memória. Nesse while, o arquivo é lido carregando na
memória linha por linha, enquanto que com o esquema do array, vc trabalha
com o arquivo todo na memória.



> close FILE;
> open(OUTFILE, "> c:/perl/report.dci") or die "Can't open output file";
>

Se vc não usou parênteses lá em cima, pq usou agora? Não entendi. De
qualquer forma, procure usar o open de três parâmetros.


>
> chomp @read;
>
>
>
> #searching area
>
>
>       print "digite uma linha\n";
>              $choose=<STDIN>; chomp $choose;
>

#O que você quer fazer com $choose ?????? Não aparece no código mais
abaixo...rsrs!

              my @greplines = grep(/@lines/, at read);
>


Quem é @lines???? De onde ele vem?


>       print "Não encontrado!!"  unless(@greplines);
>         foreach $line (@greplines) {
>   print OUTFILE @lines."\n";
>  while (<FILE>) {
>  sub commify {
>
> }
> }
>




>
>
>
>
> Boa Tarde
>
>
>
>
> _________________________________________________________________
> More than messages–check out the rest of the Windows Live™.
> http://www.microsoft.com/windows/windowslive/
>
> --
> Luis Motta Campos is a software engineer,
> Perl Programmer, foodie and photographer.
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm at pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>



-- 
André Garcia Carneiro
Analista/Desenvolvedor Perl
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20090528/3e001e72/attachment.html>


More information about the SaoPaulo-pm mailing list