At 11:21 AM +0530 10/23/09, <pradeepkumar.sura...@wipro.com> wrote:
Hi,

The contents in my array looks like this...
change_id="B77_ip_sync_idl"  state="released" customer_rel="B77"
change_name="ip_vke_sync" short_description="This feature introduces the
Sync idl." planned_baseline="B77_135.00"
change_id="B77_ip_sync_idl"  state="accepted" customer_rel="B77"
change_name="ip_sync" short_description="This feature introduces the
Sync ." planned_baseline="B77_136.00"


Where is this array? What is its name? In your program, you are reading from a file, not an array. The only array is @fields, which contains the results of split on each line in the file. It is hard to tell from the above data where your lines start and stop. At least one line looks like it is wrapped, since a string in quotes is continued from one line to the next.


How do i just print planned_baseline="B77_135.00"  & state="released" ?

You find that data in your input according to whatever rules you determine about the structure of your input and print the data accordingly. What about those elements make you want to print them? The fact that your lines vary in length and format make it difficult to extract the information you want.


I tried the logic in the script below but it didn't help, as the fields
keep changing everytime in the array.

#!/usr/bin/perl -w


You should have the following line in all Perl programs to help you catch errors:

use strict;

The "-w" switch turns on warnings, but a better, more flexible way is to put the following line in your program:

use warnings;


$filename="/home/pradeep/report1.txt";

open FILE, "< $filename" or die "Can't open input file: $!";


The 3-argument form of open is better, as are lexically-scoped file handle variables:

open( my $file, '<', $filename ) or die("Can't open $filename: $!");


 while (my $line = <FILE>) {


This line should then be

while( my $line = <$file> ) {

          my @fields = split(" ", $line);      # Fields separated by
colons

Your fields are not separated by colons; they are separated by spaces, so this comment is confusing. In addition, some of your fields have spaces in them, so a simple split will not give you your fields intact.

          print "$fields[2] $fields[3]\n";     # Display selected fields


Your selected fields are not always in the 3rd and 4th positions in the array.

          print "@fields\n";     # Display selected fields


Add some separators to tell where you fields are:

  print join(',',@fields),"\n";

        }

Any help would be appreciated.

You might try splitting on spaces, but then combining successive array elements until the data fields begin and end with quotes. You could also try splitting on either the strings q(=") or q(" ?) (untested):

        my @fields = split(/="|"\s?), $line;

That might work.

You could also use regular expressions:

  while( $line =~ /\s*(\w+)="([^"]+)"/g ) {
    print "$1: $2\n";
  }


--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to