1 Replies - 1673 Views - Last Post: 31 July 2014 - 05:52 AM

#1 dovah  Icon User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 38
  • Joined: 05-July 14

String processing

Posted 31 July 2014 - 05:08 AM

Hi!

I'd like to ask for help because my code isn't behaving correctly (and I can't figure out why).

So, here's my issue. I have to deduce positions in a "simple string" given positions in a "complete string".

Here's a minimal exemple of my input file:
#name   complete(cs)    len(cs) simple(ss)  len(ss) pos(cs)
NAME1   A0AAA000AAA00A  14      AAAAAAAA    8        4,6            
NAME2   AAAA0AA00000A   13      AAAAAAA     7        7


Here's my code:
$ perl -anle '
    print "$_ position(cs)" and next if /^#/;
    printf "%s",$_;
    for $pos_ss (split ",",$F[5]) {
        $char = substr($F[1],$pos_ss-1,1);
        @cs = split //,$F[3];
        @cs_idx = grep {$cs[$_] eq $char} 0..$#cs;
        push @res,++$cs_idx[$pos_ss-1];
    }
    printf "%14s\n", join ",",@res;
    @res=();
' file 


And here's my expected output: 
NAME1   A0AAA000AAA00A  14      AAAAAAAA    8        4,9	3,5
NAME2   AAAA0AA00000A   13      AAAAAAA     7        7          6


In the provided exemple, I have to say that the 4th character (which is the 3rd "A") in the complete string(cs) corresponds to the the 3rd character in the simple string(ss), and so on...

Could you please help me formatting/reviewing my code?

Thanks in advance for your precious help!!

Is This A Good Question/Topic? 0
  • +

Replies To: String processing

#2 dovah  Icon User is offline

  • New D.I.C Head

Reputation: 1
  • View blog
  • Posts: 38
  • Joined: 05-July 14

Re: String processing

Posted 31 July 2014 - 05:52 AM

I may have found an answer... :sly:

perl -aple '$" = ","; my $rx = join "", map qq((\Q$_\E)?), split //, $F[1]; chomp; $_ .= "  @{[@+[split /,/, $F[5]]]}" if $F[3] =~ $rx;'

Was This Post Helpful? 0
  • +
  • -

Page 1 of 1