Marko: String splitten

Hallo Leute,

ich habe ein wohl einfaches kleines Perl Problem, aber mir schwirrt jetzt schon so der Kopf, das ich mal die faule Tour wähle und Dumm frage, statt die Dokus zu wälzen, Sorry;-)

Das Problem:

Ein String der Form:

"Irgendeine Bezeichnung aus Zahlen und Buchstaben 1234,34 DM"

Soll in zwei Variablen gesplittet werden:

$Bezeichnung = "Irgendeine Bezeichnung aus Zahlen und Buchstaben"
$Preis = "1234,34"

Vielen Dank

Marko

  1. hi!

    Ein String der Form:
    "Irgendeine Bezeichnung aus Zahlen und Buchstaben 1234,34 DM"
    Soll in zwei Variablen gesplittet werden:
    $Bezeichnung = "Irgendeine Bezeichnung aus Zahlen und Buchstaben"
    $Preis = "1234,34"

    Leider hast du uns kein Beispiel für die Bezeichnung genannt. Wenn in der Bezeichnung keine Leerzeichen vorkommen, funktioniert es folgendermaßen:
      my ($Bezeichnung, $Preis) = split / /, $String, 2;

    bye, Frank!

    1. Leider hast du uns kein Beispiel für die Bezeichnung genannt. Wenn in der Bezeichnung keine Leerzeichen vorkommen, funktioniert es folgendermaßen:
        my ($Bezeichnung, $Preis) = split / /, $String, 2;

      Danke für die prompte Antwort, leider können aber auch Leerzeichen, Zahlen und sonst alles vorkommen, man müsste von hinten z.B. 345,00 DM absplitten, also DM-Leerstelle-Zahlenbetrag bis zur ersten Leerstelle. Aber wie formuliere ich da die verdammten regulären Ausdrücke ?

      Gruss

      MArko

      1. Hallo Marko

        leider können aber auch Leerzeichen, Zahlen und sonst alles vorkommen, man müsste von hinten z.B. 345,00 DM absplitten, also DM-Leerstelle-Zahlenbetrag bis zur ersten Leerstelle. Aber wie formuliere ich da die verdammten regulären Ausdrücke ?

        Das folgende tut zumindest mal:

        #! perl

        $String = "Bezeichnung aus 2 Zahlen und 123 Buchstaben zu 1234,34 DM";
        $String =~ /(.*)( \d*,\d\d DM)/;
        $Bezeichnung = $1;
        $Preis = $2;
        print "Bezeichnung = $Bezeichnung\nPreis = $Preis";

        Voraussetzung dabei ist, dass der Preis immer am Ende steht und immer mit DM endet (kann man evtl. noch etwas verfeinern, in dem man fuer DM auch Wildcards einsetzt, dann aber muss ein § ans Ende, damit klar ist, dass die letzten Zeichen des Strings gemeint sind)

        viele Gruesse
          Stefan Muenz

        1. Hallo auch!

          leider können aber auch Leerzeichen, Zahlen und sonst alles vorkommen, man müsste von hinten z.B. 345,00 DM absplitten, also DM-Leerstelle-Zahlenbetrag bis zur ersten Leerstelle. Aber wie formuliere ich da die verdammten regulären Ausdrücke ?

          Das folgende tut zumindest mal:

          #! perl

          $String = "Bezeichnung aus 2 Zahlen und 123 Buchstaben zu 1234,34 DM";
          $String =~ /(.*)( \d*,\d\d DM)/;
          $Bezeichnung = $1;
          $Preis = $2;
          print "Bezeichnung = $Bezeichnung\nPreis = $Preis";

          Voraussetzung dabei ist, dass der Preis immer am Ende steht und immer mit DM endet (kann man evtl. noch etwas verfeinern, in dem man fuer DM auch Wildcards einsetzt, dann aber muss ein § ans Ende, damit klar ist, dass die letzten Zeichen des Strings gemeint sind)

          Das mit der Voraussetzung stimmt so nicht! Wenn dieses Script auf einen String wie
          "Bezeichnung aus 2 Zahlen und 123 Buchstaben zu 1234,34 DM und so weiter"
          angesetzt wird, dann bekommen wir auch als Preis: "1234,34 DM". Ein enfaches "$" am Ende
          der regular-expression würde dies dann ausschalten. Man könnte sich jetzt höchstens noch Gedanken machen, ob die Zahlwerte auch anders aussehen können ... ach ja, der Txt " DM" sollte ja weg fallen.

          $String = "Bezeichnung aus 2 Zahlen und 123 Buchstaben zu 1.234,34 DM";
          ($Bezeichnung, $Preis) = ($String =~ /(.*)\s([\d.]+(?:,\d\d?)?) DM/);
          print "Bezeichnung = $Bezeichnung\nPreis = $Preis";

          Schade eigentlich, daß sowas immer zum Wochenende hin hier auftacht :(

          ciao,
             Jörk

  2. Hye marko

    "Irgendeine Bezeichnung aus Zahlen und Buchstaben 1234,34 DM"

    Soll in zwei Variablen gesplittet werden:

    anstatt dir hier jetzt genau aufzuschreiben wie es funktioniert, verweise ich dich wieder aufs waelzen von dokus. dabei wuerde ich dir aber
    <../../tgck.htm#a1> speziell empfehlen.

    mit dem index befehl und den dazugehoerigen muesstest du einfach abfragen ab welchem zeichen eine zahl steht. und ab diesem zeichen dann splitten.

    sollte nicht so schwer sein.
    cu

    1. »

      anstatt dir hier jetzt genau aufzuschreiben wie es funktioniert, verweise ich dich wieder aufs waelzen von dokus. dabei wuerde ich dir aber
      <../../tgck.htm#a1> speziell empfehlen.

      Hi Bogus,

      danke, aber genau das hab ich natürlich schon gewälzt, es geht aber nicht, da ja auch schon die Bezeichnung eine Zahl enthalten kann, z.b. Peugeot 306

      Gruss

      MArko

      1. »

        anstatt dir hier jetzt genau aufzuschreiben wie es funktioniert, verweise ich dich wieder aufs waelzen von dokus. dabei wuerde ich dir aber
        <../../tgck.htm#a1> speziell empfehlen.

        Hi Bogus,

        danke, aber genau das hab ich natürlich schon gewälzt, es geht aber nicht, da ja auch schon die Bezeichnung eine Zahl enthalten kann, z.b. Peugeot 306

        es geht aber doch! dann beginnst du eben von hinten mit dem aufloesen. da der betrag bzw. die zahl immer am ende steht, liest du von hinten so viele zeichen nach vor, bis nach den zahlen das erste mal ein leerzeichen kommt.

  3. Hallo Leute,

    ich habe ein wohl einfaches kleines Perl Problem, aber mir schwirrt jetzt schon so der Kopf, das ich mal die faule Tour wähle und Dumm frage, statt die Dokus zu wälzen, Sorry;-)

    Das Problem:

    Ein String der Form:

    "Irgendeine Bezeichnung aus Zahlen und Buchstaben 1234,34 DM"

    Soll in zwei Variablen gesplittet werden:

    $Bezeichnung = "Irgendeine Bezeichnung aus Zahlen und Buchstaben"
    $Preis = "1234,34"

    »»

    Vielen Dank

    Marko

    Hallo Marko,

    Warum setzt du nicht einfach ein Trennzeichen vor den Betrag? z.B. "Irgendeine Bezeichnung aus Zahlen und Buchstaben #1234,34 DM"

  4. Hallo Marko !

    Versuch mal das:

    #hier wird " DM" incl. Leerzeichen entfernt
    $string=~s/ DM//g;
    #hier wird die letzte Stelle mit einem Leerzeichen ermittelt
    $anfang_betrag=rindex($string," ")+1;
    #hier wird aus $string der Betrag gezogen
    $betrag=substr($string,$anfang_betrag);
    #hier wird der Rest ermittelt
    $string=~s/ $betrag//g;
    #hier wird wieder DM an den Betrag angefügt
    $betrag="$betrag"." DM";

    print "Content-type: text/html\n\n";
    print "$string<br>\n";
    print "$betrag\n";

    gruß
    jörg

  5. Vielen Dank,

    zwei praktikable Möglichkeiten habe ich nun. War aber wirklich nicht ganz trivial ;-)

    Gruss

    Marko