[Cascavel-pm] retirando dados de texto pra bd mysql...
Nelson Ferraz
nferraz em phperl.com
Quarta Abril 14 10:28:57 CDT 2004
Gabriel Rodrigues wrote:
> Tenho um arquivo com essas características...
>
>>gnl|uv|J01749.1:1-4361-49 Cloning vector pBR322
>
> TTCTCATGTTTGACAGCTTATCATCGATAAGCTTTAATGCGGTAGTTTATCACAGTTAAATTGCTAACGC
> AGTCAGGCACCGTGTATGAAATCTAACAATGCGCTCATCGTCATCCTCGGCACCGTCACCCTGGATGCTG
> TAGGCATAGGCTTGGTTATGCCGGTACTGCCGGGCCTCTTGCGGGATATCGTCCATTCCGACAGCATCGC
>
> 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...
Gabriel,
Eu vi que algumas pessoas já responderam, então vou enviar um exemplo
didático, de como o programa poderia ser feito.
Você deveria começar o script com um loop:
while (my $linha = <>) {
chomp $linha; # remove o "\n" do final
next unless $linha =~ m/(.+?)|(.+?)|(.+?)\s(.+)/;
# continua...
}
Com isso, o programa vai varrer o arquivo em busca de uma linha que case
com o padrão m/(.+?)|(.+?)|(.+?)\s(.+)/.
Por exemplo, a seguinte linha faria o programa seguir adiante:
gnl|uv|J01749.1:1-4361-49 Cloning vector pBR322
Não apenas isso, mas depois desta linha os valores dos campos são
armazenados em "variáveis mágicas", $1, $2, $3 e $4.
Então, o código da primeira parte do programa seria mais ou menos assim:
while (my $linha = <>) {
chomp $linha; # remove o "\n" do final da linha
next unless $linha =~ m/(.+?)|(.+?)|(.+?)\s(.+)/;
my ($campo,$campo2,$campo3,$campo4) = ($1,$2,$3,$4);
# continua...
}
> 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.
Eu recomendaria separar os campos na base de dados:
my $query = "INSERT INTO tabela (campo1,campo2,campo3,campo4)
VALUES ($campo1,$campo2,$campo3,$campo4)";
Mas se você precisar *mesmo* da linha inteira, basta usar a variável
$linha, definida anteriormente.
> 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...
Partindo do principio que a sequencia vem na linha seguinte, você
precisaria fazer alguma coisa como:
my $linha2 = <>; # pega a sequência
chomp $linha2; # remove o "\n" do final
my $query = "INSERT INTO tabela (campo1,campo2,campo3,campo4)
VALUES ($campo1,$campo2,$linha,$linha2)";
Nós realmente precisaríamos conhecer a estrutura do arquivo-texto para
oferecer uma solução mais adequada.
Dica final: "perldoc perlretut"
--
[]s
Nelson
________________________________________________________________
Nelson Ferraz
GNU BIS: http://www.gnubis.com.br
PhPerl: http://www.phperl.com
Mais detalhes sobre a lista de discussão Cascavel-pm