[Cascavel-pm] Substituir letra

Luis Motta Campos monsieur_champs em yahoo.com.br
Sexta Maio 12 05:00:35 PDT 2006


Nelson Ferraz wrote:
> Luis Motta Campos wrote:
> 
>>>E outra coisa.. tenho a variavel $data que vem nesse formato (yyyymmdd_hhmm)
>>>preciso passar para o formato do MYSQL pois vou inserir no banco..
>>>yyyy-mm-dd hh:mm
>>
>>   $data =~ s{(20\d{2})              # ano VALIDO em $1
>>              (0?[1-9]|1[012])       # mes VALIDO em $2
>>              (0?[1-9]|[12]\d|3[01]) # dia (quase*) VALIDO em $3
>>              _                      # underscore, conforme especificado
>>              ([01]\d|2[0-3])        # horas VALIDAS em $4
>>              ([0-5]\d)              # minutos VALIDOS em $5
>>              }{$1-$2-$3 $4:$5}x;    # Finalmente, a string mágica...
> 
> 
> Poxa, Luis... isso não foi um pouco de over-engineering de sua parte? rs

   Double check everything. ;-) Engenharia e conferência de erros nunca 
é demais.

> Talvez o programa ganhe alguma coisa, mas perde muito em legibilidade, 
> comparando-se com um simples /(\d\d\d\d)(\d\d)(\d\d)_(\d\d)(\d\d)/. E, 
> lembre-se, o tempo do programador vale muito mais do que o tempo da 
> máquina! (Ok, quase sempre... rs)

   Você acha que a minha versão é ilegível?!?! Eu escrevi assim para ter 
certeza de que as pessoas conseguiriam ler e entender. Está otimizado 
para ser legível.

> Além disso, a sua a regexp não funciona para qualquer período fora do 
> século XXI, e um único caractere trocado, no meio de tantos caracteres, 
> poderia gerar um erro imprevisível.

   Eu a fiz assim em avanço. Posso reescrevê-la facilmente para 
trabalhar em outras centúrias conforme for necessário:

   $data =~ s{(20[0-6|19\d{2})       # ano VALIDO em $1
              (0?[1-9]|1[012])       # mes VALIDO em $2
              (0?[1-9]|[12]\d|3[01]) # dia (quase*) VALIDO em $3
              _                      # underscore, conforme especificado
              ([01]\d|2[0-3])        # horas VALIDAS em $4
              ([0-5]\d)              # minutos VALIDOS em $5
              }{$1-$2-$3 $4:$5}x;    # Finalmente, a string mágica...

   Pronto, esta versão fucniona com qualquer ano entre 1900 e 2006. Eu 
tenho controle completo sobre os dados, Nélson. É para isso que servem 
expressões regulares.

> Enfim: "Projete para a simplicidade; só adicione complexidade onde 
> precisar." ;)

   Isto beira o filosófico. Defina "Simplicidade". Defina 
"Complexidade". Se pergunte qual dos dois programas é mais provável que 
um leigo compreenda.

> PS- eu entendo que o objetivo foi ser didático... mas eu não poderia 
> perder esta oportunidade de liberar meu lado ogro, não é mesmo? :D
> 

   <funny>
   Seu Lado Ogro precisa tomar lições de selvageria com o meu... ;-) Ele 
é tão civilizado que eu respondi a sua mensagem.
   </funny>

   Aos interessados, acho que a versão nova da Expressão Regular tras 
algumas coisas interessantes.

-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  Luis Motta Campos is Software Engineer, Oracle OCP/DBA, Un*x
  Sysadmin, Member of {Lisbon,São Paulo,Cascavel,Brasil,London}
  Perl Mongers and Perl Fanatic Evangelist
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

		
_______________________________________________________ 
Abra sua conta no Yahoo! Mail: 1GB de espaço, alertas de e-mail no celular e anti-spam realmente eficaz. 
http://br.info.mail.yahoo.com/


Mais detalhes sobre a lista de discussão Cascavel-pm