[Vienna-pm] Gleichen Anfang in mehreren Zeilen entfernen
Stefan Weiss
spaceman at foo.at
Sun May 22 12:14:51 PDT 2005
On 2005-05-22 20:11, Roland Lammel wrote:
> Wenn ich dass halbwegs richtig verstanden hab, dann soll der Anfang
> gleicher Zeichen (die anfangs unbekannt sind) entfernt werden von
> allen Zeilen:
Genau.
> Ich würde schon zuvor prozedural das größten gemeinsamen anfangs
> string bestimmen und dann mit einer RE entfernen.
[..]
> Ein einfacher Algorithmus (und noch auszuprogrammieren):
[snip]
Naja, eine Lösung hab ich ja schon, nur ist die halt etwas grauslich,
deshalb hab ich sie vorher nicht mitgepostet. Ist wie gesagt nur
vorübergehend und völlig unausgegolft:
my $level = 0;
my $leader = "";
my @dirs = split("/", substr($str, 0, index($tmp, ": ")));
do {
$leader = "/" . join("/", @dirs[1 .. ++$level]);
} while ($str =~ /^(\Q$leader\E[^\n]+\n)+$/s);
if ($level > 2) {
$leader = "/" . join("/", @dirs[1 .. --$level]) . "/";
$str =~ s/^\Q$leader\E//gsm;
}
Diese Variante geht davon aus, dass alle Zeilen nach dem Pfad ein ": "
enthalten, was in der Praxis auch der Fall ist. Ausserdem wird nur
gekürzt, wenn mindestens 2 Verzeichnisse dadurch wegfallen.
Ich hoff immer noch auf den heiligen regulären Gral :-)
cheers,
stefan
More information about the Vienna-pm
mailing list