Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
dbfile-lines.pl
#!/usr/local/bin/perl -w
# dbfile-lines.pl -- Zeilenweises Editieren einer Textdatei.
use DB_File; # DB_RECNO Binding
use Fcntl; # O_*-Konstanten
# @lines soll ein Abbild einer Textdatei sein.
# $L benoetigen wir fuer put()- und del()-Methoden
$L = tie @lines, 'DB_File', (shift || "/tmp/testfile"),
O_RDWR | O_CREAT, 0666, $DB_RECNO
or die "can't tie(): $!\n";
while (($cmd,$pos,$newval) = prompt()) {
if ($cmd eq 'd') {
# (d)elete: Zeile Nummer $pos loeschen
$L->del($pos);
} elsif ($cmd eq 'c') {
# (c)hange): Zeile Nummer $pos ersetzen
$lines[$pos] = $newval;
} elsif ($cmd eq 'i') {
# (i)nsert before: Zeile vor $pos einfuegen:
$L->put($pos, $newval, R_IBEFORE);
} elsif ($cmd eq 'a') {
# insert (a)fter: Zeile nach $pos einfuegen:
$L->put($pos, $newval, R_IAFTER);
} elsif ($cmd eq '.') {
# Zeige aktuelle (.) Zeile an Position $pos:
print "$pos: ", $lines[$pos], "\n";
} elsif ($cmd eq 'p') {
# (p)rint all: Zeige alle Zeilen an:
print join("\n", @lines), "\n";
} elsif ($cmd eq 'n') {
# print all with (n)umbers: Zeilen mit Nummern anzeigen:
print join("\n", map { "$_: $lines[$_]" } 0 .. $#lines),
"\n";
} elsif ($cmd eq 'x' or $cmd eq 'q') {
# e(x)it program: Das war's Leute!
print "Bye!\n";
last;
} else {
# Unerkanntes Kommando
print "What? [(d)elete, (c)hange, (i)nsert before,\n";
print " insert (a)fter, print current (.) line,\n";
print " (p)rint all lines, all (n)umbered lines,\n";
print " e(x)it or (q)uit]\n";
}
}
# Wir sind fertig: $L Referenz aufloesen, dann untie()
undef $L; untie @lines;
sub prompt {
my ($cmd,$pos,$newval);
print "Cmd? "; chomp($cmd = <STDIN>) or return ();
if ($cmd =~ /^[acid.]/) {
print "Pos? "; chomp($pos = <STDIN>) or return ();
if ($cmd =~ /^[aci]/) {
print "Val? "; chomp($newval = <STDIN>) or return ();
}
}
return ($cmd, $pos, $newval);
}
[Prev] [Up] [Relevant Chapter] [Next]
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:55:56 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|