in reply to Re: Parsing and Obtaining Values from output
in thread Parsing and Obtaining Values from output

/[(.*?)]/ won't match anything having to do with square brackets. It is a character set (the  [] metacharacters) consisting of the  ( ) . * ? characters.

Replies are listed 'Best First'.
Re^3: (weird dup - please reap) Parsing and Obtaining Values from output
by Perllace (Acolyte) on Apr 12, 2011 at 12:00 UTC
    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

      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