[SP-pm] Problemas numa comparação

Blabos de Blebe blabos at gmail.com
Wed Jul 8 20:04:56 PDT 2009


Pô Solli, "querido" assim em público, soou tão bamby, quase magoei...

Tentei não dar muitos passos em Perl, centrando na parte bitwise. Mas
vc está certo.

Mas eu lembrei dos uses:

perldoc strict
perldoc warnings
perldoc diagnostics

Eden, as sequences são automáticas se o tipo for da família serial
http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL

Não conheço o tal Statistics. O formato estranho com muitos campos,
não seria trabalho dessa ferramenta?

Quanto a ler o arquivo eu *acho* que cada linha é um registro. Não seria melhor:

<code>
while (my $line = <$filehandle>) {
    # faz alguma coisa com a linha
}
</code>


???



2009/7/8 Solli Honorio <shonorio em gmail.com>:
> 2009/7/8 <claudio em dpreferencial.com.br>
>>
>> A todos boa noite!
>>
>> Soli,
>> valeu a intenção, mas assim não rola..
>> já resolvi isto com & mesmo...
>
> Sim, e foi exatamente o que eu fiz... a primeira alternativa foi uma
> tradução do teu código perl, e a segunda opção estou utilizando operador de
> bitwise para saber se o existe bit ativo na posição que você deseja.
>
>>
>>
>> Estou passando o meu sistema que é em Delphi..mas...
>> sou novato total em Perl...rsrs...
>>
>>
>> Respondendo a sua pergunta:
>> ________________
>> Um breve histórico:
>>
>> Eu trabalho com processamento de pesquisas de mercado. (tabulação)
>>
>> No começo trabalhei muito anos com Statiscs SPSS, Statiscs ... (com estes
>> programas as bases ficavam realmente gigantes..rsrs..200.000 campos..rsrs)
>> acabei desenvolvendo meu próprio sistema de tabulação.
>>
>> Desenvolvi um formato para o meu arquivo de dados,
>> levando em consideração minhas necessidades, tais como:
>>
>> - conteúdo criptografado.
>> - tamanho final do arquivo de base.
>> - quantidade final de campos na base.
>> - base não normalizada = campos multivalorados e dependentes..
>> - conteúdo dos campos: numérico.
>>
>> levando em consideração que:
>> - 80% dos campos de uma pesquisa são campos numéricos e RM (respostas
>> múltiplas=campos multivalorados)
>>   Ex:
>>   Quais frutas vc gosta:
>>   1 - abacaxi
>>   2 - Mamão
>>   3 - abacate....  até o código 50.
>>
>>   um fulano responde os códigos 2/3/4/9/10/15
>>
>>
>>   num buffer(array de boleanos) eu marco true nestas posição e gravo.
>>
>>
>> Veja, no SPSS ou em outras bases "normais" eu precisaria de 15 campos para
>> guardar as informações,
>> quando que eu guardo num campo só..de tamanho bem pequeno...rsrs..
>
> ... e vc está utilizando um inteiro para representar as múltiplas opções
> ativadas ? tipo se o cara optar pelos códigos acima temos o valor  34332 ! e
> aí vc armazena este valor no teu sistema ? Este sistema é bem eficiente, mas
> tem o limite de 32 bits numa kernel 32bits.
>
>>
>>
>> (não percebeu meu nome ..rsrs =>  Binaghi = Binário..rsrs.. aqui só rola
>> um neurônio, que de vez em quando resolve ficar True..rsrs)
>> ____________________________________________________
>> ____________________________________________________
>>
>> (é um código totalmente grosso..mas funfa..rsrs)
>>
>> É assim que eu faço:
>>
>> Leio o arq:
>>
>>   open(tap,"<$PathHtdocs");
>>   binmode tap;
>>       my ($buf, $data, $n, @cont);
>>       while (($n = read tap, $data, $x) != 0) {
>>           print "$n bytes read\n";
>>          $buf .= $data;
>>       }
>>        print "$buf";
>>   close(tap);
>
> deixa eu entender uma coisa no código assim, vc está lendo um arquivo
> inteiro e colocando o conteúdo na variável $buf ? Se for isto, sem querer
> ofender, realmente o código está bem baby Perl, e existe maneira mais
> interessante de fazer isto :
>
> <code>
> my $data = do {
>   local $/ = undef;
>   open my $file, '<', $path_htdocs or die "Erro : $!\n";
>   <$file>;
> }
> </code>
>
> ... mas informação sobre esta técnica chamada de Slurp você encontra no link
> http://www.perl.com/pub/a/2003/11/21/slurp.html ... só temos que tomar
> cuidado com arquivos muito grande, pois vai tudo para a memória.
>
> Eu tentei ler o resto do programa para estruturar de uma maneira mais
> eficiente e com cara de Perl, mas desisti porquê esta muito confuso na minha
> opinião.
>
> O Frederico fez algumas alterações importantes, mas pra mim o código
> continuou confuso pra mim, e é algo que vc poderia considerar, visto que
> código de difícil leitura normalmente significa código ineficiente.
>
> Aproveite a oportunidade e interesse da lista em discutir o assunto para
> melhorar o teu código, apesar de estar funcionando, pode funcionar melhor.
>
> Solli M. Honório
>
>>
>>  @cont=split(//,$buf);
>>
>> Comparo o conteúdo:
>>
>>   push (@byt,1);
>>   push (@byt,2);
>>   push (@byt,4);
>>   push (@byt,8);
>>   push (@byt,16);
>>   push (@byt,32);
>>   push (@byt,64);
>>   push (@byt,128);
>>   my @res;
>>   my $RecCount=$n*8;
>>   for($a=1;$a<=$RecCount+1;$a++){
>>        push (@res,0);
>>   }
>>   my $pos=0;
>>   for($a=1;$a<=$n;$a++){
>>     $val=$cont[$a];
>> print "----> testa valor $a:=$cont[$a]<br>\n";
>>     if(ord($val)!=0){
>>       for($k=0;$k<=7;++$k){
>>           $pos=8*($a-1)+$k+1;
>>           $ord=ord($val);
>>           if(ord($val) & $byt[$k]) {
>>             $res[$pos]=1;
>>             $r=ver_conteudo(ord($val),$byt[$k]);
>> print "----> res[$pos]:=1 / $r<br>\n";
>>           }
>>       }
>>     }
>>   }
>> ____________________________________________________
>> ____________________________________________________
>>
>> Esse formato é para as respostas no formato de códigos,
>> os textos, destes códigos, ficam guardados em outro arquivo..
>> Tipo na base normal se guarda no formato literal: Sim, Não..
>> na minha base quardo 1, 2 e tenho um texo só para sim e não..
>>
>> Sacou...
>>
>>
>> Obrigado pela atenção..
>>
>> Abs
>>
>> Claudio H.Binaghi
>> claudio em dpreferencial.com.br
>> 5511 3288.4840
>>
>>
>>
>>
>>
>>
>> ----- Original Message -----
>> From: Solli Honorio
>> To: saopaulo-pm em mail.pm.org
>> Sent: Wednesday, July 08, 2009 3:32 PM
>> Subject: Re: [SP-pm] Problemas numa comparação
>> Claudio, eu não ví que vc já havia encontrado o teu problema, mas continuo
>> curioso sobre o teu trabalho... mas quero mostra uma outra solução para o
>> teu problema...
>>
>> <code>
>> sub ver_conteudo {
>>   return 1 << $_[0] & $_[1] ? 1 : 0;
>> }
>>
>> if ( ver_conteudo(1,6) ) {
>>   print "Verdadeiro\n";
>> } else {
>>   print "Falso\n";
>> }
>> </code>
>>
>> apesar de não ser tão legível (com certeza percisa de uma explicação), é
>> muito mais rápido pois não preciso criar um array.
>>
>> Solli M. Honório
>>
>> 2009/7/8 Solli Honorio <shonorio em gmail.com>
>>>
>>> Claudio, eu não o que vc quer cara, não entendi o que vc quis dizer com
>>> 'É uma comparação feita como entre Bytes como Boolean.', então vou responder
>>> o que eu acho que deveria ser a tradução do teu código:
>>>
>>> <code>
>>> sub ver_conteudo {
>>>   my @bits = (1,2,4,8,16,32,64,128);
>>>   return $bits[1] & $_[0] ? 1 : 0;
>>> }
>>>
>>> if ( ver_conteudo(8) ) {
>>>   print "Verdadeiro\n";
>>> } else {
>>>   print "Falso\n";
>>> }
>>> </code>
>>>
>>> Agora fiquei curioso, porque e como vc está traduzindo um programa em
>>> Delphi para Perl ? Isto é para uma empresa ?
>>>
>>> Abraços,
>>>
>>> Solli M. Honório
>>>
>>> 2009/7/8 <claudio em dpreferencial.com.br>
>>>>
>>>>
>>>> Pessoall, Boa tarde!
>>>>
>>>> Como sempre, estou precisando de um HELP!!!
>>>>
>>>> Estou passando um sistema de Delphi para Perl
>>>> e não tenho consiguido achar indicação
>>>> para desenvolver este trecho do código.
>>>>
>>>> É uma comparação feita como entre Bytes como Boolean.
>>>> ________________________________________________________________
>>>> ________________________________________________________________
>>>> Segue o trecho do código:
>>>>
>>>> Procedure Ver_Conteudo;
>>>>    const BITS: array[0..7] of Byte = (1,2,4,8,16,32,64,128);
>>>>    Res:   Boolean;
>>>> Begin
>>>>
>>>>   Res := Boolean ( BITS[1] and 6 );    // Este é o trecho que me
>>>> interessa,  este resultado dá true.
>>>>
>>>>   if (Res) Then ShowMessage('True') else ShowMessage('False');
>>>>
>>>> End;
>>>>
>>>> ________________________________________________________________
>>>> ________________________________________________________________
>>>>
>>>> Qualquer ajuda/ luz, ajuda muito...
>>>>
>>>> desde já agradeço a todos.
>>>>
>>>> Abs
>>>>
>>>> Claudio H.Binaghi
>>>> claudio em dpreferencial.com.br
>>>> 5511 3288.4840
>>>>
>>>> _______________________________________________
>>>> SaoPaulo-pm mailing list
>>>> SaoPaulo-pm em pm.org
>>>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>>
>>>
>>>
>>> --
>>> "o animal satisfeito dorme". - Guimarães Rosa
>>
>>
>>
>> --
>> "o animal satisfeito dorme". - Guimarães Rosa
>>
>> ________________________________
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>>
>> _______________________________________________
>> SaoPaulo-pm mailing list
>> SaoPaulo-pm em pm.org
>> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>
>
>
> --
> "o animal satisfeito dorme". - Guimarães Rosa
>
> _______________________________________________
> SaoPaulo-pm mailing list
> SaoPaulo-pm em pm.org
> http://mail.pm.org/mailman/listinfo/saopaulo-pm
>


More information about the SaoPaulo-pm mailing list