Perl Cd Bookshelf [Electronic resources] نسخه متنی

اینجــــا یک کتابخانه دیجیتالی است

با بیش از 100000 منبع الکترونیکی رایگان به زبان فارسی ، عربی و انگلیسی

Perl Cd Bookshelf [Electronic resources] - نسخه متنی

| نمايش فراداده ، افزودن یک نقد و بررسی
افزودن به کتابخانه شخصی
ارسال به دوستان
جستجو در متن کتاب
بیشتر
تنظیمات قلم

فونت

اندازه قلم

+ - پیش فرض

حالت نمایش

روز نیمروز شب
جستجو در لغت نامه
بیشتر
لیست موضوعات
توضیحات
افزودن یادداشت جدید

11.10. Reading and Writing Hash Records to Text Files


11.10.1. Problem



You want to read or write hash records
stored in text files.

11.10.2. Solution


Use a simple file format with one field per line:

FieldName: Value

and separate records with blank lines.

11.10.3. Discussion


If you have an array of records that you'd like to store into and
retrieve from a text file, you can use a simple format based on mail
headers. The format's simplicity requires that the keys have neither
colons nor newlines, and the values not have newlines.

This code writes them out:

foreach $record (@Array_of_Records) {
for $key (sort keys %$record) {
print "$key: $record->{$key}\n";
}
print "\n";
}

Reading them in is easy, too.

$/ = ";                # paragraph read mode
while (<>) {
my @fields = split /^([^:]+):\s*/m;
shift @fields; # for leading null field
push(@Array_of_Records, { map /(.*)/, @fields });
}

The split acts upon $_, its
default second argument, which contains a full paragraph. The pattern
looks for start of line (not just start of record, thanks to the
/m) followed by one or more non-colons, followed
by a colon and optional whitespace. When split's
pattern contains parentheses, these are returned along with the
values. The return values placed in @fields are in
key-value order, with a leading null field we shift off. The braces
in the call to push produce a reference to a new
anonymous hash, which we copy @fields into. Since
that array was stored in order of the needed key-value pairing, this
makes for well-ordered hash contents.

All you're doing is reading and writing a plain text file, so you can
use related recipes for additional components. You could use Recipe 7.18 to ensure that you have clean,
concurrent access; Recipe 1.18 to store
colons and newlines in keys and values; and Recipe 11.3 to store more complex structures.

If you are willing to sacrifice the elegance of a plain textfile for
a quick, random-access database of records, use a DBM file, as
described in Recipe 11.14.

11.10.4. See Also


The split function in
perlfunc(1) and Chapter 29 of
Programming Perl; Recipe 11.9; Recipe 11.13; Recipe 11.14


/ 875