Hi there!!!, this is how I usually do it, hmmm
but without the error checking here ;))
sub ReadConfig($)
{
my $ConfigFile=shift;
my %Config;
my $Item;
open CONFIG,"<$ConfigFile" or return %Config;
while(<CONFIG>)
{
chomp;
next if ((/^#/)||(/^\s*$/));
# Yeah, I'm sorry for the .* here...
if (/^\[(.*)\]$/) {$Item=$1;next;};
if($Item)
{
my ($SubOption,$Value)=split /\=/;
if ($Value)
{
push @{$Config{$Item}{$SubOption}},$Value;
}
else push @{$Config{$Item}},$_;
};
};
close CONFIG;
return(%Config);
};
Anyways.. this is close to how I do it, this code not tested 'n stuff
GrtZ!
ChOas
Upd. Oh yeah, I usually read the config as quick as possible,
and do the error/sanity checking in another sub, dunno why,
but it gives me kinda clean code, I like that...
Even though I'm Lazy ;))
Upd2.
Just to clear things up, this will ofcourse leave you with
a hash something like this:
$Config{'parm commands'}
|-{'snmp-server community RO'} eq 'notpublic';
|-{'timeout'}==10;
@{$Config{'no snmp-server community'}}=>(public,private,secret,bogus);
Hope it helps....
| [reply] [Watch: Dir/Any] [d/l] [select] |
Thanks ChOas. That's just what I had in mind.
cheers,
Don
striving for Perl Adept
| [reply] [Watch: Dir/Any] |
Don't underestimate XML! It's got parsers already written out the wazoo, it's simple enough that a user of moderate abilities can figure it out and edit it (if Joe Blow can learn HTML, surely he can learn this), and if he can't, there are XML editors out the wazoo as well to help him on his way. A structure as returned from XML::Simple can be just as efficient and look exactly the same as you'd expect a complex data structure as returned from a proprietary config file format. | [reply] [Watch: Dir/Any] |
Fastolfe - thanks for reminding me of XML::Simple. Had forgot all about it as an option. ++ to you and to cianoz for suggesting it.
But... I just can't require my coworkers to learn even simple XML to use the script. Some are gurus on EIGRP, ATM, etc. but only markup I've seen from any is with Frontpage or MS-Word "save as HTML". First time someone wrote bad config markup, my code would get blamed 8^(
If I were submitting the code to Freshmeat it'd be a different story.
cheers,
Don
striving for Perl Adept
/me wanders over to Editor Requests to see if Ed will let me add XML::Simple to list in original post...
| [reply] [Watch: Dir/Any] |
If an 8-year-old can learn HTML, with dozens of different tags and formatting things, surely an adult can learn an XML schema with as many tags as you have configuration options.. *shrug*. I would present them with a sample and see how easily they learn it. Your XML parser should inform them of errors in the XML file as well as early in the process as you can (perhaps a separate process from your application that checks the syntax of the file, which they can run after each change they make).
In addition, there are lots of simple XML editors on the market now too, complete with nice GUI front-ends, and IE 5 does a pretty good job of displaying it.
I personally don't think learning XML is going to be your biggest hurdle, but obviously you know the users better than I do, so it's your call... Good luck though.
| [reply] [Watch: Dir/Any] |