in reply to Re: splitting arrays
in thread splitting arrays

Hi

I am reading in a file of data, each line has 50 bits of tab-delimited data. I normally use split but for some reason, some items have lots of newline characters seperating the data and some don't. I am doing this within a while loop but it is considering every line as a separate record, not every item.

while (<ARRAY_DATA>) { $line = $_; chomp ($line); @array = (); @array = split (/\s+/, $line); # other stuff here }

Replies are listed 'Best First'.
Re^3: splitting arrays
by RazorbladeBidet (Friar) on Apr 15, 2005 at 13:27 UTC
    So are you saying that inside that line of 50 items (I'm assuming you're using the term "bits" to mean "things" not 0 or 1) there are newline characters? If so, what is the line termination character - how do you know when you need to start on the next "line".
    --------------
    "But what of all those sweet words you spoke in private?"
    "Oh that's just what we call pillow talk, baby, that's all."
      sadly, there is no "line" termination character, i only know when to start the next one after 50 tab-delimited 'things' have been found
        if newlines are considered part of the data:
        (untested)
        { local $/="\t"; my $i = 0; my @arr = (); while ( <FILE> ) { push @{$arr[$i++%50]}, $_; } }
        This should (note that the code is untested) give you an array of array references that each contain 50 items (except possibly the last array ref).

        Does that do what you wanted?
        --------------
        "But what of all those sweet words you spoke in private?"
        "Oh that's just what we call pillow talk, baby, that's all."
Re^3: splitting arrays
by Roy Johnson (Monsignor) on Apr 15, 2005 at 14:30 UTC
    If your goal is to read 50 items into an array on each pass of the loop:
    while (!eof DATA) { local $/="\t"; chomp(my @set = map {(eof) ? () : scalar(<DATA>)} 1..50); print "Set: ", join(',', @set), "\n"; }
    Use whatever filehandle is appropriate.
    Update: changed second eof to use "last file read" default form.

    Caution: Contents may have been coded under pressure.