[Cascavel-pm] retirando dados de texto pra bd mysql...

Luis Campos de Carvalho lechamps em terra.com.br
Quarta Abril 14 10:07:13 CDT 2004


Gabriel Rodrigues wrote:
> Olá pessoal blz ? 
> Tenho um arquivo com essas características...
> 

   [snip]

> gostaria de pegar antes de tudo o codigo que estah
> depois do segundo pipe '|' ateh o primeiro espaço que
> vier, mandando o mesmo para uma coluna no mysql...
> 
> depois pegar o que estiver depois do espaco e mandar
> para um outro campo no bd mysql...
> 
> Depois disso pegar estah mesma linha que inicia com
> '>' INTEIRA e enviar para uma outra coluna.
> 
> Em seguida tem que enviar todo o codigo que vem com as
> letras ACGT para um unico campo tipo binario. São
> todas as letras ateh a proxima entrada que começar com
> outro '>' que aí já não faz mais parte da sequencia
> antiga...

   Gabriel, parece simples fazer isso com um par de regular expressions 
e um loop while. Talvez você não conheça Perl o suficiente para resolver 
sozinho, e eu posso ajudar. Mas preciso que você me envie uma "amostra" 
de um arquivo (pode ser velho), anexada, em formato ASCII, para que eu 
consiga construir expressões regulares boas o suficiente para resolver 
seu problema.

   Acho que você pode começar assim:

   { # Expressões regulares para capturar dados dos genes
     # Descrição da codificação de uma base...
     my $base = qr/[ATCG]/;
     my $base_field = qr/$base+\s+(?:$base+(?:\s+)?)*/;
     # este é o primeiro campo, não sei o que quer dizer (Gabriel?)
     my $field1 = qr/gnl/;
     # Este parece ser o "separador" de campos, posso
     # estar enganado (Gabriel?)
     my $separator = qr/|/;
     # este é o segundo campo, parece que o único valor
     # possível é "uv". Confirme isso, Gabriel.
     my $field2 = qr/uv/;
     # Esta expressão regular bate com o terceiro campo,
     # mas pode ser ruim para o restante do arquivo. Preciso
     # saber mais sobre o formato do terceiro campo. Gabriel,
     # quanto mais informações você fornecer, mais depressa
     # posso ajudar a resolver o que resta deste problema.
     my $field3 = qr/[A-Z]\d{5}\.\d:\d\-\d{4}\-\d{2}.+$/;

     # Esta é a expressão regular que eu (suponho)
     # captura todos os campos de cada registro:
     my $record = qr/^>
                     ($field1) $separator
                     ($field2) $separator
                     ($field3) \s+
                     ($base_field)
                    /x; # Este 'x' é MUITO importante!
     while( <GENE_DUMP_FILE> ){
       my( $campo1, $campo2, $campo3, $bases ) = m/$record/;
       # operação de gravar no seu banco de dados preferido aqui
     } # end while
   }

   Putamplexos!
-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
   Luis Campos de Carvalho is BSc in Comp Science,
   PerlMonk [SiteDocClan], Cascavel-pm Moderator,
   Unix Sys Admin && Certified Oracle DBA
   http://br.geocities.com/monsieur_champs/
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=




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