[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