Power-Coderin: X-tes Zeichen in einem String ersetzen

Hi Leute!

Ich hab noch mal eine Frage:

Ich habe da einen String:

$variable="Satz. Noch ein Satz. Satz 3. Und hier ist der letzte Satz";

Nun bekomme ich $variable vorgesetzt und möchte den Punkt nach Satz 3 durch ein anderen Zeichen ersetzen. Wie ersetzen im Prinzip geht hab ich schon gelernt, aber wie ersetze ich nur den dritten Punkt und nicht alle??

Danke!

  1. Hi,

    $variable="Satz. Noch ein Satz. Satz 3. Und hier ist der letzte Satz";

    Nun bekomme ich $variable vorgesetzt und möchte den Punkt nach Satz 3 durch ein anderen Zeichen ersetzen. Wie ersetzen im Prinzip geht hab ich schon gelernt, aber wie ersetze ich nur den dritten Punkt und nicht alle??

    In dem du zuerst seine Position ermittelst [1], und ihn dann gezielt austauschst.

    [1] Die Folgefrage "Und wie das?" höre ich zwar schon kommen, möchte dich aber bitten, dir darüber erst mal selber Gedanken zu machen. Schau mal nach, welche der String Functions dabei hilfreich sein könnten.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
  2. Hello,

    Ich habe da einen String:

    $variable="Satz. Noch ein Satz. Satz 3. Und hier ist der letzte Satz";

    Nun bekomme ich $variable vorgesetzt und möchte den Punkt nach Satz 3 durch ein anderen Zeichen ersetzen. Wie ersetzen im Prinzip geht hab ich schon gelernt, aber wie ersetze ich nur den dritten Punkt und nicht alle?

    Als erstes musst Du dazu wissen, in welcher Kodierung Dein String vorliegt.
    PHP weiß dies leider nicht von alleine. Das String-Objekt hat in PHP noch einiges zu lernen ;-)

    Also: Singlebytecode oder Multibytecode?

    Danach richtet sich dann die Wahl der Funktionen, mit denen Du den String untersucheh und bearbeiten kannst.

    Singlebyte: http://www.php.net/manual/en/ref.strings.php
    Multibyte:  http://www.php.net/manual/en/ref.mbstring.php

    Bei Single-Byte-Code kannst Du das auch generisch lösen, also (nahezu) ohne die Verwerwendung der fertigen Funktionen. Hab da mal eine kleine Betrachtung dazu gebastelt.

    <?php  ### singlebyte.php ###  Datei abspeichern in ISO8859-1 !

    $text = "Große grüne Luftballons fliegen öfter über die älteren Bäume. Man nennt sie Überflieger der Ältesten";
        $ruler ="0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";

    echo "<pre>\r\n";

    echo $text."\r\n";
        echo $ruler."\r\n";

    echo "Länge: ".strlen($text)."\r\n";

    echo "101. Zeichen: ".$text[101]."\r\n";

    echo "Typ des 101. Zeichens: ".gettype($text[101])."\r\n";

    echo "100. Zeichen ist vorhanden: ".(($text[99]  == '')?'true':'false')."\r\n";
        echo "101. Zeichen ist vorhanden: ".(($text[100] == '')?'true':'false')."\r\n";

    ### finde das dritte kleine 'ü'

    $pos = 0;
        $count = 0;
        $found = false;
        $search = 'n';
        $quant  = 3;

    while($pos < 1000)    ## es ginge auch 'while(true)'
        {
            $letter = $text[$pos];
            if ($letter == '')  { break; }

    if ($letter == $search) { $count++; }
            if ($count  == $quant)
            {
               $found = true;
               break;
            };

    $pos++;
        }

    if ($found)
        {
            echo "Der $quant. Buchstabe '$search' befindet ich an Imndex-Position [$pos] im String\r\n";
        }
        else
        {
            echo "Es sind nur $count Buchstabe '$search' im String enthalten\r\n";
        }
    ?>

    Wie das nun aber (ohne die speziellen Funktionen) mit einem Multibyte-String gehen könnte, ist mir nicht klar. Vermutlich gar nicht. Da der Index-Operator für einen MB-String nicht anders überladen ist, als für einen SB-String, kann PHP da nicht helfen, dneke ich.

    Die Stringbehandlung mit extra mb_funktionen ist mMn der falsche Ansatz für das Problem. Man hätte nur einen Schalter für sb/mb einführen müssen und die Objekte (Funktionen) entsprechend anpassen können.

    Liebe Grüße aus Syburg

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello,

      kein Test ohne Fehler...

      echo "100. Zeichen ist vorhanden: ".(($text[99]  == '')?'true':'false')."\r\n";
          echo "101. Zeichen ist vorhanden: ".(($text[100] == '')?'true':'false')."\r\n";

      echo "100. Zeichen ist vorhanden: ".(($text[99]  == '')?'false':'true')."\r\n";
          echo "101. Zeichen ist vorhanden: ".(($text[100] == '')?'false':'true')."\r\n";

      sollte natürlich anders herum heißen.

      Liebe Grüße aus Syburg

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de