Holger: Funktion, um Leerzeichen in Liste zu löschen ???

Hallo,
ich habe folgendes Problem:
In meinem Skript gibt es eine Liste @musikplan, in der Einträge ungefähr so vorhanden sind:
$musikplan[0] "   James & Diane   Hits From UK`s Finest"
$musikplan[1] "   Alan Graham           Rock Pop & Sax"
$musikplan[2] "   Jimmi                  Modern Music"
etc..

Gibt es eine Funktion, mit der ich alle Leerzeichen bis auf jeweils eines zwischen den Wörtern in den einzelnen Elementen löschen kann?
Ich weiss, dass der entsprechende reguläre Ausdruck /\s+2/ heisst; möchte aber idealerweise umständlichen Quelltext umgehen.
Welchen Befehl kann ich anwenden?

  1. Hi,

    Gibt es eine Funktion, mit der ich alle Leerzeichen bis auf jeweils eines zwischen den Wörtern in den einzelnen Elementen löschen kann?

    perldoc -f tr
    perldoc perlop

    Ich weiss, dass der entsprechende reguläre Ausdruck /\s+2/ heisst;

    Zu ineffizient.

    möchte aber idealerweise umständlichen Quelltext umgehen.

    Huh?

    Cheatah

    1. perldoc -f tr
      perldoc perlop

      Wie ist es möglich die einzubinden? Könntest du einmal ein kleines Beispiel bringen? Dazu benötige ich CGI.pm?

      1. Hi,

        perldoc -f tr
        perldoc perlop
        Wie ist es möglich die einzubinden?

        äh... Moment mal. Soll das heißen, Dir ist die Dokumentation Deiner Programmiersprache nicht bekannt? Wie zur Hölle hast Du bisher programmieren können?! Ohne Doku geht sowas doch gar nicht!

        perldoc ist ein mit Perl mitgeliefertes Programm, welches Dir die genannte Dokumentation aufruft. Beginne mit

        perldoc perl
        perldoc perlfaq
        perldoc perlstyle

        Könntest du einmal ein kleines Beispiel bringen?

        Die stehen hinreichend in der Doku. Die Regular-Expression-Variante solltest Du _nicht_ nutzen.

        Cheatah

  2. hi!

    In meinem Skript gibt es eine Liste @musikplan, in der Einträge
    ungefähr so vorhanden sind:
    $musikplan[0] "   James & Diane   Hits From UK`s Finest"
    $musikplan[1] "   Alan Graham           Rock Pop & Sax"
    $musikplan[2] "   Jimmi                  Modern Music"
    etc..
    Gibt es eine Funktion, mit der ich alle Leerzeichen bis auf
    jeweils eines zwischen den Wörtern in den einzelnen Elementen
    löschen kann?

    Du kannst in einer for-Schleife alle Element der Liste durchgehen:

    for (@musikplan) {
        ...
      }

    Innerhalb der for-Schleife existiert dann eine Variable $_, die immer
    den jeweils aktuellen Inhalt aus der Liste enthält. Wenn du diese
    Variable veränderst, wird auch gleichzeitig der aktuelle Eintrag in
    der Liste selbst geändert.

    Ich weiss, dass der entsprechende reguläre Ausdruck /\s+2/ heisst;
    möchte aber idealerweise umständlichen Quelltext umgehen.

    Der Ausdruck stimmt aber nicht ganz. Am einfachsten wäre das wohl in
    mehreren Schritten zu lösen:

    for (@musikplan) {
        s/^\s+//;
        s/\s+$//;
        s/\s+/ /g;
      }

    Die erste Substitution löscht Leerzeichen am Anfang, die zweite die
    am Ende eines Eintrags. Danach werden dann Leerzeichen, die doppelt
    oder mehrfach vorkommen auf ein Leerzeichen reduziert.

    bye, Frank!

    1. for (@musikplan) {
          s/^\s+//;
          s/\s+$//;
          s/\s+/ /g;
        }

      Haargenau das ist es!!! Vielen Dank!