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/