Carl der Eine: Teileinfügung in einen String

Hallo miteinander,
mit substr kann man einen Teil aus einem String holen, aber umgekehrt konnte ich nichts finden. Ich kenne eine solche Funktion von anderen Programmiersprachen, wo in einen Teil in einen String einfügen kann

$Wert = "Text200907Neu"

Im String ist z.B. das Datum 200907, oder auch einen anderen Wert enthalten. Diesen möchte ich durch einen anderen Wert ersetzen. Gut, ich kann $Ziel = substr($Wert, 0, 4).$Datum.substr($Wert, 10, 3) angeben, aber eleganter und flexibler wäre substr($Wert, 4, 6) = $Datum. So geht es jedoch leider nicht. Gibt es dafür in Perl eine Funktion, die ich übersehen habe? Schon mal vielen Dank für eure Mühe.

  1. Hallo miteinander,

    versuch es mit einem regulären Ausdruck -> nutze auch google -> "regulärer Ausdruck"

    $Wert = "Text200907Neu"

    $Wert =~ s/\d+/$neuerwert/; wird 200907 durch "$neuerwert" ersetzen. in diesem Fall ist der Reguläre Ausdruck mit ~s als Suchen/Ersetzen aufgebaut. Gesucht wird wie folgt:

    $scalar =~ s/Dieses wird gesucht/und durch dieses ersetzt/;

    in meinem Beispiel habe ich \d+ im Suchen bereich angegeben was bedeutet das er möglichst viele Aufeinanderfolgende Ziffern finden soll.

    Das Thema RegExp ist recht kompliziert, aber ich denke Du kannst Dich da durchaus einarbeiten!

    Gruß der Hilker

    1. versuch es mit einem regulären Ausdruck> "regulärer Ausdruck"

      Ja, du hast recht, diese sind eigentlich noch flexibler, man muss manchmal ein wenig damit experimentieren, bis man zum Ziel kommt.

      Danke für deinen Tipp!

      1. keine Ursache! Falls Du noch fragen hast, werd ich Dir gern behilflich sein!

        mfG!

    2. gudn tach!

      versuch es mit einem regulären Ausdruck -> nutze auch google -> "regulärer Ausdruck"

      wenn man eine fixe ersetzung (soll heissen, dass die positionen explizit bekannt sind) durchfuehren moechte, sind regexp nicht so gut geeignet und i.d.r. auch nicht so schnell.

      regexp sind sinnvoll, wenn man nur weiss, wie das zu ersetzende aussieht, aber nicht weiss, wo genau es steht.

      wir wissen bei Carl der Eine nun nicht, ob er erst aufwaendig eruieren musste, wo das datum steht, oder ob er das schon a priori weiss. im einen ersten fall waeren regexp eine denkbare sinnvolle alternative, im zweiten fall rate ich zur substr-funktion.

      prost
      seth

  2. gudn tach!

    mit substr kann man einen Teil aus einem String holen, aber umgekehrt konnte ich nichts finden.

    das manuel hilft da weiter:
    perldoc -f substr
    beachte den vierten parameter.

    ich kann $Ziel = substr($Wert, 0, 4).$Datum.substr($Wert, 10, 3) angeben, aber eleganter und flexibler wäre substr($Wert, 4, 6) = $Datum.

    einfuegen kann man auf diese weise. fuer's ersetzen gibt's eine etwas andere syntax:

    substr($Wert, 4, 6, $Datum);

    prost
    seth

  3. $Wert = "Text200907Neu"

    Im String ist z.B. das Datum 200907, oder auch einen anderen Wert enthalten. Diesen möchte ich durch einen anderen Wert ersetzen. Gut, ich kann $Ziel = substr($Wert, 0, 4).$Datum.substr($Wert, 10, 3) angeben, aber eleganter und flexibler wäre substr($Wert, 4, 6) = $Datum. So geht es jedoch leider nicht.

    Wieso nicht?

    my $wert = "Text200907Neu";  
    my $datum = '201010';  
    substr($wert, 4, 6) = $datum;  
    print $wert;  
    
    

    Bezüglich dem "Codingstyle", du solltest immer mit use strict arbeiten und Variabeln mit einem grossen Anfangsbuchstaben kennzeichnen ein Objekt, normlae Variabeln solltest du immer mit kleinbuchstaben beginnen.

    Struppi.

    1. gudn tach!

      substr($Wert, 4, 6) = $Datum. So geht es jedoch leider nicht.

      Wieso nicht?

      hmpf, ich hatte mich noch kurz gewundert, dass perl hier mal so unintuitiv sein sollte, hab's aber gar nicht erst ausprobiert, sondern im manual gesehen, dass dort nur die andere methode genannt wird.

      beruhigend, zu wissen, dass es doch geht.
      perl ist toll! :-)

      prost
      seth