On Fri, Jan 28, 2011 at 3:49 PM, Rob Dixon <[email protected]> wrote:
> On 28/01/2011 15:26, jet speed wrote:
>
>> Hi All,
>>
>> I need help on this one please.
>>
>> I have a input file with the following data. The 7 times 000s i have added
>> in the input file in order to start with 1808 as the eight element. which
>> works ok. am sure there is a better way.
>>
>> now once i captre the 8th element ex: 1808, then 1810 so on in the list, i
>> print the output. which works fine.
>>
>> similarly i need to capture the following 7 list of elements in the file
>> and
>> print it out with certain parameter.
>>
>> e.g the Required output
>> ------------------------------------------
>> This is 1808 eigth element
>> This is1809
>> This is 180A
>> This is 180B
>> This is 180C
>> Thsi s 180D
>> This is 180E
>> This is 180F
>> This is 1810 eigth element
>> This is 1811
>> This is 1812
>> This is 1813
>> This is 1814
>> This is 1815
>> This is 1816
>> This is 1817
>> input.txt file
>> 0000
>> 0000
>> 0000
>> 0000
>> 0000
>> 0000
>> 0000
>> 1808
>> 1809
>> 180A
>> 180B
>> 180C
>> 180D
>> 180E
>> 180F
>> 1810
>> 1811
>> 1812
>> 1813
>> 1814
>> 1815
>> 1816
>> 1817
>> #!/usr/bin/perl
>> use strict;
>> use warnings;
>> my $filename;
>> my $counter = 0;
>> my $A;
>> ######### FORM META
>> ########################################################
>>
>> # if the counter 4 the insert 3 times 000 into the file for correct start
>> # if the counter 8 then insert 7 times 000 into the file for correct
>> start
>>
>> $filename = "input.txt" ;
>> open (FILE, "< $filename" ) or die "Could not open $filename: $!";
>> while (<FILE>) {
>> chomp;
>> $counter++;
>> next unless ($counter == 8);
>> $counter=0; # Of course you should not forget to reset your counter ;-)
>> print "form meta from dev $_\; \n";
>> }
>>
>>
>> ##############################################################################
>> Any help on this would be much appreciated.
>>
>
> First some comments on your code:
>
> - It is much better to declare variables as late as possible rather
> than in a block at the start of your progam
>
> - Always use lexical file handles ($fh instead of FH) and the three-
> parameter form of open. Well done checking the return status and
> displaying the value of $!
>
> - You can use the built-in variable $. which keeps track of the current
> record number of your input file
>
> I suggest something like the program below, which uses the modulus
> operator % on the current line number $. to determine whether we are at
> the start of an eight-line block. This way there is no need to add
> padding to the start of the data.
>
> HTH,
>
> Rob
>
>
> use strict;
> use warnings;
>
> my $filename = "input.txt" ;
>
> open my $fh, '<', $filename or die "Could not open $filename: $!";
>
> while (<$fh>) {
> chomp;
> if ($. % 8 == 1) {
> print "$_ eighth element\n";
> }
> else {
> print " $_\n";
> }
> }
>
> **OUTPUT**
>
> 1808 eighth element
>
> 1809
> 180A
> 180B
> 180C
> 180D
> 180E
> 180F
> 1810 eighth element
>
> 1811
> 1812
> 1813
> 1814
> 1815
> 1816
> 1817
>
Hi Rob,
Brilliant, you made it look so simple. Thanks again for your help with this
Kind Regards
TM