ITmajor has asked for the wisdom of the Perl Monks concerning the following question:

I am trying to gather informatin from a tab separated text file and generate a graph based on criteria from user. I will only pull information from the 1st, 4th & 8th columns. The first row contains column headers. How do I parse the data from the text file into an array? I want to use GD Graph to plot a scatter graph. The text file will be something like this:
name1  name2  name3  name4  name5  name6  name7 name8 name9
data   data   data   data   data   data   data  data  data
data   data   data   data   data   data   data  data  data
Any advice?

20080709 Janitored by Corion: Closed stray PRE tag

Replies are listed 'Best First'.
Re: Parsing information from text file
by johngg (Canon) on Jul 07, 2008 at 18:36 UTC
    Having placed use strict; and use warnings; at the top of your script you can

    • Open your input file using a lexical filehandle and the three-argument form of open, being sure to test for success.

    • Do a scalar read in a for loop iterating for however many lines of heading you wish to skip over. Doing it in a loop means the variable you read into only exists within the scope of the loop so it isn't left hanging around. For a single discard you could just do one read in a bare block to achieve the same.

    • Use split, as already advised, in combination with an array slice to get your columns. Remember that array subscripts start at zero. If you need to use the last column remember to chomp the line terminator at the top of the while loop.

    Code not tested.

    use strict; use warnings; my $headerCt = 1; my $dataFile = q{xxx.dat}; open my $dataFH, q{<}, $dataFile or die qq{open: < $dataFile: $!\n}; my $discard = <$dataFH> for 1 .. $headerCt; while ( <$dataFH> ) { my ( $col1, $col4, $col8 ) = ( split m{\t} )[ 0, 3, 7]; # Do something here with your extracted columns. } close $dataFH or die {close: < $dataFile: $!\n};

    I hope this helps you towards a solution.

    Cheers,

    JohnGG

Re: Parsing information from text file
by apl (Monsignor) on Jul 07, 2008 at 18:09 UTC
    Use the split function on the input line, specifying tab as the separator.
Re: Parsing information from text file
by poolpi (Hermit) on Jul 08, 2008 at 12:54 UTC

    See GD::Graph::Data

    # From the doc : use GD::Graph::Data; use GD::Graph::bars; my $data = GD::Graph::Data->new(); $data->read(file => '/data/sales.dat', delimiter => ','); $data = $data->copy(wanted => [2, 4, 5]);

    hth,
    PooLpi

    'Ebry haffa hoe hab im tik a bush'. Jamaican proverb