Yes, there's a DFILE for the last entry. Mis-edit on my part....kinda left
it hanging, didn't I? All the output goes to the same file.

Thanks for the suggestion. I'll play some and see how it goes. Thanks again.

Pat


----- Original Message -----
From: "Peter Scott" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, November 04, 2002 12:50 PM
Subject: Re: V Unpretty code


> In article <00e201c28426$051681e0$[EMAIL PROTECTED]>,
>  [EMAIL PROTECTED] (Patrick Salmon) writes:
> >I have a piece of code that does repeated searches through an input =
> >string and modifies it according to certain criteria. What I have works =
> >great, but I'd like to know how to write it better/more efficiently.=20
> >
> >Given that I'm going over the same record until I get a hit (or not), =
> >how would I re-write the following so that it's not a series of if =
> >....if...if...if?
> >
> >    if (/^\s[eE|aA]\d\d\d\d\d\D/){s/A/W95/;$w95++;print DFILE;next;}; #
=
> > (E or A + nnnnn) =3D Windows95
> >    if (/^\s[a-zA-Z]{5}dfs\d\d\d+/){s/A/W2K-S/;$w2ks++;print =
> >DFILE;next;}; #   W2K Server
> >    if (/^\s[a-zA-Z]{3}salnm+/){s/A/W2K-S/;$w2ks++;print DFILE;next;}; #
=
> >  W2K Server
> >    if (/^\s[a-zA-Z]{3}scadc+/){s/A/W2K-DC/;$dc++;print DFILE;next;}; #
=
> > w2k Domain Controller   =20
> >    if (/^\s\w\w\wnfris\d\d\d/){s/A/Snap/;$snaps++;print DFILE;next;}; #
=
> >  Quantum Snap server
> >    if (/^\susu/){s/A/Non-MS/;$switch++;print DFILE;next;};   #   Switch
> >    if (/^\sus/){s/A/Non-MS/;$legacy++;print DFILE;next;};   #   Legacy =
> >device (Print Server, etc)
> >    if (/^\ssap/){s/A/Non-MS/;$legacy++;print DFILE;next;};   #   SAP =
> >Host =20
> >    if (/^\srib/){s/A/Non-MS/;$legacy++;print DFILE;next;};   #   SNMP =
> >Host =20
> >    if (/^\s\wdcs+/){s/A/DCD/;$legacy++;print DFILE;next;};    #   Data =
> >Center Device
> >    if (/^\s[a-zA-Z]{3}de\d\d\d\d\d/){s/A/W2K/;$w2k++;$good++;print =
> >DFILE;next;};#   w2k desktop - obeying convention
> >    if (/^\s[a-zA-Z]{3}le\d\d\d\d\d/){s/A/W2K/;$w2k++;$good++;print =
> >DFILE;next;};#   w2k laptop - obeying convention
> >    if (/^\s[a-zA-Z]{3}d\d{1,6}/){s/A/W2K/;$w2k++;print DFILE;next;}; #
=
> > w2k desktop - Pre-Nextwave=20
> >    if (/^\s[a-zA-Z]{3}l\d{1,6}/){s/A/W2K/;$w2k++;print DFILE;next;}; #
=
> > w2k laptop - Pre-Nextwave
> >    if (/^\s[a-zA-Z]{3}l+/){s/A/W2K?/;$w2k++;print DFILE;next;}; #   w2k
=
> >laptop - probable.
> >    if (/^\s[a-zA-Z]{3}d+/){s/A/W2K?/;$w2k++;print DFILE;next;}; #   w2k
=
> >desktop - probable.
> >
> >    {s/A/?/;} # Anything left over is interesting. Flag it for follow-up
=
> >with a "?".
>
> Sure there's no print DFILE in that last case?  Why the substitution then?
>
> I'd do something like
>
> my @rules = (
>     qr/^\s[eE|aA]\d\d\d\d\d\D/   => sub { s/A/W95/;   $w95++  },
>     qr/^\s[a-zA-Z]{5}dfs\d\d\d+/ => sub { s/A/W2K-S/; $w2ks++;},
>   ...
> );
>
> OUTER: while (<SOMEINPUTSTREAM>) {
>   for (my $i = 0; $i <= $#rules; $i += 2) {
>     /$rules[$i]/ and do { $rules[$i+1]->(); print DFILE; next OUTER };
>   }
>   s/A/?/;
> }
>
>
> If it weren't for the fact that sometimes you increment two variables I'd
> have used a hash for the increments instead.  Might still be better to
have
> a hash instead of all those little variables.
>
> --
> Peter Scott
> http://www.perldebugged.com
>
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to