in reply to Re^2: (weird dup - please reap) Parsing and Obtaining Values from output
in thread Parsing and Obtaining Values from output

Hi
my @array1; my $data = "[0|0|{A=145,B=2,C=12,D=18}|!][0|0|{A=167,B=2,C=67,D=1 +7}|.1iit][196|0|{A=244,B=6,C=67,D=12}|10:48AM][204|0|{A=9,B=201,C=61, +D=11}|Calculator][66|0|{A=145,B=450,C=49,D=14}|phone]0|0|{A=145,B=2,C +=12,D=18}|!0|0|{A=167,B=2,C=67,D=17}|.1iit196|0|{A=244,B=6,C=67,D=12} +|10:48AM204|0|{A=9,B=201,C=61,D=11}|Calculator66|0|{A=145,B=450,C=49, +D=14}|phone"; my $high = 0; my @values = split(/\[([^\]]+)\]/,$data) ; print "Values is @values \n"; foreach(@values) { #I want the value that preceeds the first occurence of | in ea +ch array element, i.e 0,0,196,204,etc.. my ($conf,$rest)= split(/\|/,$_) ; print "Conf is $conf \n"; print "Rest is $rest \n"; push(@array1, $conf ); push (@array2, $rest); print "Array 1 is @array1 \n"; print "Array 2 is @array2 \n"; } $conf = highest(@array1); my $i=0; #I want the index value of the element that contains the highest conf +value..in this case 204 for (@myarray1) { last if $conf eq $_; $i++; }; print "$conf=$i\n"; #I want to print the rest of the string that was split in the sam +e index position, $rest = @array2[$i]; print "Rest is $rest \n"; # To get the higest conf value sub highest { my @data = @_; my $high = 0; for(@data) { $high = $_ if $_ > $high; } $high; }
I tried this..but I'm not getting anywhere close to the output that I need... THanks, Perllace
  • Comment on Re^3: (weird dup - please reap) Parsing and Obtaining Values from output
  • Download Code

Replies are listed 'Best First'.
Re^4: Parsing and Obtaining Values from output
by Ratazong (Monsignor) on Apr 12, 2011 at 12:33 UTC

    Hi

    note: the following is not intended to be a fix to your program; instead I try to show you a few steps you could have done to identify faulty/suspicious parts of your program...

    First, you have not followed the golden rule to

    use strict; use warnings;
    Then you would have found out some obvious mistakes like
    for (@myarray1) { last if $conf eq $_; $i++; };
    Secondly, you use debug-output, which is fine ... however it is not detailed enough; e.g.
    print "Values is @values \n";
    Here you can't easily see that the array @values might not contain what you want (but many empty elements addtionally). This leads to many unitialized values in the further run of your program. You could use something like print join("XXX\n", @values);

    If you look at your debug-output to more detail, you would see that the first (non-empty) element of @values is

    0|0|{A=145,B=2,C=12,D=18}|!
    and
    Conf is 0 Rest is 0
    ... so your split is not working as expected ...

    When debugging code, you should start from the beginning. Solve the points shown above. And only when you found a solution for those, continue by looking at the rest of the program. It will be much easier that way.

    HTH, Rata