[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Omaha.pm] code redux
On Tue, 12 Sep 2006, Dave M wrote:
Looks like it to me. It's not like $prt{'blah'} will keep the
justification properties, right?
Although, I would write things like this:
$prt{'reversal_flag'} = (" ") x 3;
$prt{'reversal_period'} = (" ") x 5;
I hate counting spaces.... :)
I wrote a class a couple years back that we call Model::FixedWidth. It
makes fixed width files a breeze. Unfortunately there are a lot of fixed
width formats in our lives so we use the heck out of it. No more counting
columns of *anything*. :)
The code I posted earlier does everything the hard way, and I can't be
bothered to port it today... lazy, lazy boy.
j
NAME
Model::FixedWidth - Easy objects for fixed width text
files. One object per line.
SYNOPSIS
my $fw = new Model::FixedWidth, "new()");
$fw->set_attributes(qw(
fname undef %10s
lname undef %-10s
points 0 %04d
);
$fw->parse(message => " JayHannah 0003");
print $fw->get_fname; # Jay
print $fw->get_lname; # Hannah
print $fw->get_points; # 0003
$fw->set_fname('Chuck');
$fw->set_lname('Norris');
$fw->set_points(17);
print $fw->string; # ' ChuckNorris 0017'
DESCRIPTION
If you're familiar with printf formats, then this class
should make processing fixed width files trivial. Just
define your attributes and then you can get_* and set_*
all day long. When you're happy w/ your values envoke
string() to spit out your object in your defined fixed
width format.
When reading a fixed width file, simply pass each line of
the file into parse(), and then you can use the get_ meth-
ods to retrieve the value of whatever attributes you care
about.
See Model/Rewards/* for gobs of real-world uses of this
class.
METHODS
set_attributes
Pass in arguments in sets of 3 and we'll set up attributes
for you.
The first argument is the attribute name. The second argu-
ment is the default value we should use until told other-
wise. The third is the printf format we should use to read
or write this attribute from/to a string.
$fw->set_attributes(qw(
fname undef %10s
lname undef %-10s
points 0 %04d
);
parse
Parse a string. Set each attribute to the value listed in
the string.
$fw->parse(message => " JayHannah 0003");
string
Dump the object to a string. Walks each attribute in order
and outputs each in the format that was specified during
set_attributes.
print $fw->string; # ' ChuckNorris 0017'