Página 1 de 4 123 ... ÚltimoÚltimo
Resultados 1 a 10 de 34
  1. #1
    Newbie
    Data de Ingresso
    Jan 2012
    Posts
    70

    Somar numeros presentes em um arquivo, mas antes remover um texto

    Ola pessoal , estou com uma duvida, tenho os seguintes dados em um arquivo que passo por parametro:

    > RF00001_A
    > RF00002_B
    > RF00003_B
    > RF00004_A
    > RF00005_A
    > RF00007_B
    > RF00008_B
    > RF00009_A
    > RF00010_A
    > h 9
    119
    140 143
    120 107 142
    105 108 125 107
    120 93 142 120 85
    103 126 131 115 42 103
    255 246 245 243 262 247 268
    259 250 237 237 250 245 258 304

    nesses dados, eu preciso por exemplo, atribuir a 119 ao RF00001_A , a soma do (140+143) ao RF00002_B e assim por diante, mas como faço para percorrer esse arquivo? somar os numeros da matriz? e ainda atribuir essa soma a cada RF?

  2. #2
    Hacker Avatar de acpguedes
    Data de Ingresso
    Sep 2011
    Localização
    #!/usr/bin/env perl
    Posts
    955
    esses numeros q vc tem q atribuir vc coloca em um array e manda somar o arrai, no caso 8 arrays
    nesse negocio acima vc vai ter q colocar em uma string so o INT, pra isso vc ira precisar de regex...

    ainda não vou dar o codigo p vc, mas qualquer coisa poste aqui que eu do mais uma dica!
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!

  3. #3
    Newbie
    Data de Ingresso
    Jan 2012
    Posts
    70
    sub abre_arquivo{
    open(ARQ, $ARGV[0]) || die "error Voce nao indicou o arquivo \n";
    while (my $entry = <ARQ>) {
    @conteudo = split("\n", <ARQ>);
    for (my $i=0; $i < scalar(@conteudo); $i++) {
    print @conteudo[$i];
    }
    }
    print "@conteudo\n";
    }


    sub somaDistancia{
    $conta_linhas = 0;
    while(my $entry = <ARQ>){
    my (@lines) = split("\n", $entry);
    }
    print @lines;
    }

    essa eh uma parte do meu código, nao esta fazendo o que eu quero ainda, porém estou fazendo para ir testando aos poucos e vendo como esta ficando, o problema é que tipo, eu estou com duvida na parte de percorres os dados do arquivo, como captar esses dados, tipo (> RF00010_A) e pegar os dados daquela linha e atribuir para a mesma...

    vou ver sobre regex aqui, e muito obrigado por enquanto!!!

    Abraço

  4. #4
    Hacker Avatar de acpguedes
    Data de Ingresso
    Sep 2011
    Localização
    #!/usr/bin/env perl
    Posts
    955
    o "> RF00010_A" tera que virar uma regexp onde ira extrair so o "00010" que ira fazer parte de uma string

    talvez não precise somar um array com aquela outra parte basta colocar "my $soma1 = 140 + 143;" e assim vai

    depois soma o que extraiu da regex e pronto
    RF00010_A
    Código PHP:
    my @rf = (0...0);
    my @resultado = (... 0);
    while (<
    DATA>){
    if (
    regex){
    @
    rf[0] = $;
    }
    }
    @
    resultado[0] = 119 + @rf[0];
    $
    1
    __DATA__
    RF00001_A
    RF00002_B
    RF00003_B
    RF00004_A
    RF00005_A
    RF00007_B
    RF00008_B
    RF00009_A
    RF00010_A
    h 9 
    Bem, eu n testei, mas é por ai...fiz so p dar uma luz... qualquer coisa tamo ai...
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!

  5. #5
    Membro Avatar de guilez
    Data de Ingresso
    Aug 2008
    Localização
    ~/
    Posts
    276
    Olá,
    Precisa ser necessariamente em perl?
    Eu fiz algo muito parecido com isto, aqui: http://www.forum-invaders.com.br/vb/showthread.php/40008-Desafio-Perl-01-Sessão-e-usuários-ativos?p=285708&viewfull=1#post285708

    Abraços.
    45:2d:6d:61:69:6c:3a:20:67:75:69:6c:65:7a:67:75:79 :5b:61:74:5d:67:6d:61:69:6c:5b:64:6f:74:5d:63:6f:6 d
    4a:61:62:62:65:72:3a:20:67:75:69:6c:65:7a:5b:61:74 :5d:6a:61:62:62:65:72:5b:64:6f:74:5d:6f:72:67

  6. #6
    White Hat Administrador Avatar de fvox
    Data de Ingresso
    Sep 2005
    Localização
    São Paulo - SP
    Posts
    4.428
    Hi.

    Não entendi muito bem o seu "atribuir". Você só quer concatenar no fim da string?
    Por exemplo, "RF00001_A" ficará "RF00001_A119" e por aí vai?

    []'s
    Acha que está caindo na insanidade? Mergulhe!

    Twitter | Blog | Facebook | Github

  7. #7
    Hacker Avatar de acpguedes
    Data de Ingresso
    Sep 2011
    Localização
    #!/usr/bin/env perl
    Posts
    955
    fvox, n sei se eu to certo, mas o que ele quer é assi
    "RF00001_A + 119 = RF00120_A"

    acho q é isso...
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!

  8. #8
    White Hat Administrador Avatar de fvox
    Data de Ingresso
    Sep 2005
    Localização
    São Paulo - SP
    Posts
    4.428
    Hi.

    Se for isso...

    Código PHP:
    #!/usr/bin/env perl

    use strict;
    use 
    warnings;

    my (@rf, @n) = ();

    while(<
    DATA>) {
        
    s/\s+$//g;
        
    push((/^>/ ? \@rf : \@n), $_);
    }

    for(
    .. $#rf) {
        
    my @el  split / /, ($n[$_// 0);
        
    my $sum 0;
        
    $sum += $_ for @el;
        
    my $len length $sum;
        
    $rf[$_] =~ s/\d{$len}_/$sum/g;    
    }
    print 
    $_"\n" for @rf;

    __DATA__
    RF00001_A
    RF00002_B
    RF00003_B
    RF00004_A
    RF00005_A
    RF00007_B
    RF00008_B
    RF00009_A
    RF00010_A
    h 9
    119 
    140 143 
    120 107 142 
    105 108 125 107 
    120 93 142 120 85 
    103 126 131 115 42 103 
    255 246 245 243 262 247 268 
    259 250 237 237 250 245 258 304 
    O código com alguns comentários pode ser encontrado aqui.

    []'s
    Última edição por fvox; 04 Jan 2012 às 08:29.
    Acha que está caindo na insanidade? Mergulhe!

    Twitter | Blog | Facebook | Github

  9. #9
    Hacker Avatar de acpguedes
    Data de Ingresso
    Sep 2011
    Localização
    #!/usr/bin/env perl
    Posts
    955
    isso n foi mto didatico,,, hahahaha

    eu taja dando so dicas pra ele chegar lah sozinho
    So respondo se a consiencia perguntar!!!
    Não Respondo MP's de perguntas, as faça em um tópico!

    Perl User, Bioinformatcs Programmer!

  10. #10
    Newbie
    Data de Ingresso
    Jan 2012
    Posts
    70
    acpguedes não bem isso não, o código funciona assim

    > RF00001_A
    > RF00002_B
    > RF00003_B
    > RF00004_A
    > RF00005_A
    > RF00007_B
    > RF00008_B
    > RF00009_A
    > RF00010_A
    > h 9
    119
    140 143
    120 107 142
    105 108 125 107
    120 93 142 120 85
    103 126 131 115 42 103
    255 246 245 243 262 247 268
    259 250 237 237 250 245 258 304

    de RF00002_B até RF00001_A o valor é 119
    de
    RF00003_B até RF00002_B o valor é 140
    de
    RF00003_B até RF00001_A o valor é 143
    de
    RF00004_A ate'RF00003_B o valor é 120 e assim por diante, ma so problema é que eu tenho que tipo, mostrar o valor ex: RF00003_B e a soma das distancia em um relatório.. esses (RF00003_B,RF00007_B...) são apenas uma nomenclatura...



Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •