evan9021@[EMAIL PROTECTED]
wrote:
>
> On Apr 26, 9:55 am, rob.di...@[EMAIL PROTECTED]
(Rob Dixon) wrote:
>>
>> evan9...@[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(', ', @[EMAIL PROTECTED]
);
>>> 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 @[EMAIL PROTECTED]
>>
>> while (<INFO>) {
>> chomp;
>> push @[EMAIL PROTECTED]
$_;
>> last if @[EMAIL PROTECTED]
== 3;
>>
>> }
>>
>> printjoin(', ', @[EMAIL PROTECTED]
), "\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 @[EMAIL PROTECTED]
$_;
last if @[EMAIL PROTECTED]
== 3;
}
Rob


|