#!/usr/bin/perl -w # file KLEIDER/web/src/sitestyle/shortids.pl # Kurze Schlüssel # 2014-12-20 Herbert Schiemann # GPL Version 2 oder neuer package main; use utf8 ; use Herbaer::Placeholders ; # Platzhalter ersetzen use Herbaer::Readargs ; use Herbaer::XMLDataWriter ; binmode (STDIN, ":utf8") ; binmode (STDOUT, ":utf8") ; binmode (STDERR, ":utf8") ; # Hash der Kommandozeilen-Argumente my $args = { "[cnt]verbose" => 1, "in" => "-", # Eingabedatei (Text) oder - für STDIN "ptn" => '${#alpha}', # Vorlage für kurzen Schlüssel "out" => "-", # Ausgabedatei oder - für STDOUT }; # gibt die Version nach STDOUT aus sub version { print <<'VERSION' ; shortids.pl v20141220 Kurze Schlüssel 2014 Herbert Schiemann VERSION } $args -> {"[sr]version"} = sub { version (); exit 0; }; $args -> {"[sr]help"} = sub { version (); print_message_with_values (<<'HELP', $args); shortids.pl [Optionen] --[no_]verbose Umfang der Meldungen ${[cnt]verbose} --in IN Pfad der Eingabedatei oder "-" für STDIN ${in} --ptn PTN Vorlage für kurzen Schlüssel ${ptn} --out OUT Pfad der Ausgabedatei oder "-" für STDOUT ${out} HELP exit 0; }; read_args ($args); my $pairs = []; make_pairs ($args, $pairs); write_pairs ($args, $pairs); exit 0; # Bildet Paare von "langen" und kurzen ID-Werten sub make_pairs { my ($args, $pairs) = @_; my $ptn = $args -> {"ptn"}; # Vorlage für kurzen Schlüssel my $id; # langer Schlüssel my $in = $args -> {"in"}; my $hin; if ($in eq "-") { $hin = STDIN; } elsif (! open ($hin, $in)) { print STDERR "Kann \"$in\" nicht lesen: $!\n"; exit 1; } while ( $id = <$hin> ) { $id =~ s/\s+// ; push (@$pairs, {$id => subst_placeholders ($ptn)}) ; } close $hin if $in ne "-"; } # make_pairs # Paare von langen und kurzen IDs ausgeben sub write_pairs { my ($args, $pairs) = @_; my $writer = new Herbaer::XMLDataWriter ({ '@hash' => ["hash", "value"], '%value' => ["", "value", '@key'], }); $writer -> open ($args -> {"out"}, "utf-8", "http://herbaer.de/xmlns/20121015/hash"); $writer -> write ("hash", {}, $pairs); $writer -> close (); } # write_pairs # end of file KLEIDER/web/src/sitestyle/shortids.pl