[EMAIL PROTECTED] wrote: > > On Apr 26, 9:55 am, [EMAIL PROTECTED] (Rob Dixon) wrote: >> >> [EMAIL PROTECTED] wrote: >>> >>> The following script is to read 4 consecutive lines at a time from a >>> file, concatenate the first 3 lines >>> (with a ", "), and print the result to STDOUT. If the 3 lines aren't >>> concatenated they print correctly, however >>> if they are, the result is gibberish. Any suggestions. thx., EC. >>> -------------------------------------------------------------------------------------------------------------------------------------------------- >>> #!/bin/perl >>> # Read a series of 4 rows from a file and print the first 3 on >>> # the same line. >>> $file = 'example.txt'; # Name the file >>> open(INFO, $file); # Open the file >>> $row_num = 0; >>> while (<INFO>) { >>> $i = $row_num%4; >>> if ($i <= 2) { >>> $col[$i] = "$_"; >>> } >>> if ($i <= 1) { >>> chomp ($col[$i]); >>> } >>> if ($i == 2) { >>> #$row =join(', ', @col); >>> printf ("%s", $col[0]); >>> printf (", "); >>> printf "%s, ", $col[1]; >>> printf "%s\n", $col[2]; >>> } >>> $row_num++; >>> } >>> close(INFO); # Close the file >> Something like this is, I believe, easier both to code and to understand. >> >> HTH, >> >> Rob >> >> use strict; >> use warnings; >> >> use constant FILE => 'example.txt'; >> >> open INFO, FILE or die $!; >> >> my @col; >> >> while (<INFO>) { >> chomp; >> push @col, $_; >> last if @col == 3; >> >> } >> >> printjoin(', ', @col), "\n";- Hide quoted text - > > I tried your suggestion and got the following output: > 1) the first col didn't print, and the 3rd col overwrote the 2nd; this > is the main stumbling block > 2) also, what if example.txt has 36 lines with the same format as > described. > FYI I'm using cgywin's version of perl.
Try changing the while loop to while (<INFO>) { s/\s+$//; push @col, $_; last if @col == 3; } Rob -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/