On Tuesday 30 October 2007 01:56, [EMAIL PROTECTED] wrote:
> Hello,

Hello,

> I want a script which is going to check if the numbers specified in
> the config file is the same for each of the types of lines in the
> seeding files.
>
> The script would read each line to check if the no of columns is
> correct as proposed in a config file.
>
> If it is not correct, out put an entire list of lines which were not
> correct with line number in OUTPUT file and exit with an error.
>
> If all the lines were correct, exit normally.
>
> Config.ini
> ROUTER,22
> IF,19
> QOSINTERFACE,18
>
> Seed.csv file
> QOSINTERFACE,BusPhonePrefix,BusAreaCode,BusPhoneLast4
> QOSINTERFACE,BusPhonePrefix,BusAreaCode,BusPhoneLast4
> IF,BusPhonePrefix,BusAreaCode,BusPhoneLast4,BusAreaCode
> IF,BusPhonePrefix,BusAreaCode,BusPhoneLast4
> QOSINTERFACE,BusPhonePrefix,BusAreaCode,BusPhoneLast4
> ROUTER,BusPhonePrefix,BusAreaCode,BusPhoneLast4,BusAreaCode,
> QOSINTERFACE,BusPhonePrefix,BusAreaCode,BusPhoneLast4,BusAreaCode
> ROUTER,BusAreaCode,BusPhonePrefix,BusPhoneLast4,BusPhonePrefix,
>
> Below is the code for this particular requirement but right now
> inputs are hard coded
> I want that this script read from Config.ini file.
> Can anybody help me out in this?

Yes, you should probably store the data from the file in a hash:

my $config_file = 'Config.ini';
open my $ch, '<', $config_file or die "Cannot open '$config_file' $!";
my %config;
while ( <$ch> ) {
    chomp;
    my ( $key, $value ) = split /,/;
    $config{ $key } = $value;
    }
close $ch;



[ Code reformatted for legibility. ]

> #!/usr/bin/perl

The next two lines should be:

use warnings;
use strict;

so that perl will help you find mistakes in your code.


> $outcome = validateFile();
> if($outcome == 1) {print("file is not proper, Please check the
> file\n");}
> else {print("Everything is fine in a file\n");}
>
>
> sub validateFile
> {
>     my $state=0;
>     $ARGV[0]=ROUTER;
>     $ARGV[1]=5;
>     my $first=$ARGV[0];
>     my $second=$ARGV[1];
>     my $line_num = '';
>     my $fname="seed.csv";
>
>
>     open(OF, $fname) or die "Can't open user database file!\n";

You should include the $! variable and probably $fname in the error 
message so you know *why* it failed.


>     $. = 0;

Why are you doing this?  Hint: it has *no* effect on the value of $. 
inside the loop.


>     LINE: while ($temp_line = <OF>) {

You only have one loop so you don't really need the label.


>         chomp $temp_line;
>
>         @array = split(/,/,$temp_line,-1);
>
>         #print "CURRENT LINE $temp_line\n";
>
>         if ($first eq $array[0])
>         {
>             #print("$first is found\n");
>             [EMAIL PROTECTED];
>             # check particular line
>             if($second ne $arraylength)

You are comparing two numbers so you should use a numerical compare.  
Also you could use the array directly:

             if ( $second != @array )


Another thing you could do is instead of chomping and splitting up the 
line is to just count the number of commas plus one:

             if ( $second != 1 + $temp_line =~ tr/,// )


>             {
>                 print "CURRENT LINE $temp_line\n";
>
>                 $line_num = $.;
>                 print "LINE NUMBER $line_num\n";

Why not just:

                 print "LINE NUMBER $.\n";


>                 print("Lenght of Current Line is $arraylength which 

'Lenght' is usually spelt 'Length'.


is not matching with $second\n");
>                 $state=1;
>                 #last;
>             }
>
>         }
>         next LINE;
>
>     }
>     close($fname);
>     return ($state);
> }




John
-- 
use Perl;
program
fulfillment


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to