Seite 1 von 1

frage zu str_replace

Verfasst: 25.09.2006 12:55
von dopedouglaz
Hallo hab mal eine frage
ich habe eine Datei die ich mit der Funktion str_replace durchsuchen lasse um bestimme zeilen zu ändern.
Doch momentan ist es so das er mir alle Übereinstimmungen die er findet ändert.
Gibt es nicht eine Lösung womit er mir nur das erste gefundene ändert oder wenn er mir alle ändert dann fortalaufen ändert

Geändert
Geändert1
Geändert2
Geändert3

BeispielCode

Code: Alles auswählen

$lines = fopen("test.txt", "w+");
$text = implode ('', $lines);
$count =substr_count($text, "Überschrift ");
$g=1;
do{
$text= str_replace("Überschrift ", "Überschrift$g  ", $text  );
$g++;
$handle = fopen("test.txt", "w+");

fputs($handle, $text);
fclose($handle);
}while($g < $count);
Hier ersetzt er jede Überschrift mit Überschrift1
über ein es geht nicht oder ein beispiel würde ich mich freuen
THX
Dopedouglaz

Verfasst: 26.09.2006 19:27
von Miriam
Mich wundert, dass der Code überhaupt etwas anderes macht, als einen Fehler auszugeben. :D

Code: Alles auswählen

$lines = fopen("test.txt", "w+");
$text = implode ('', $lines);
$lines ist doch ein Zeiger (Handle), wie willst Du den imploden?
meinst Du nicht, dass es besser wäre die Datei per file("Dateiname") in ein Array zu laden und dieses Array dann nach dem Suchbegriff abzusuchen?

Verfasst: 27.09.2006 11:17
von dopedouglaz
mir geht es auch nur darum den gesuchten string fortlaufen zu veränder d.h
mit Nr. oder so die steigen String1, String2 ,String3 usw.
alles andere ist nicht so wichtig das einlesen klappt schon

Verfasst: 27.09.2006 20:03
von Miriam
Was ich sagen wollte: str_replace() schafft das nicht. Entweder alle oder garkeiner.... :D

Re: frage zu str_replace

Verfasst: 27.09.2006 22:30
von Jensemann
dopedouglaz hat geschrieben: Gibt es nicht eine Lösung womit er mir nur das erste gefundene ändert
Gibt es, aber wie Miriam schon sagte, nicht mit str_replace(). Der Vogel ist nämlich kein Spatz mehr, deswegen nehmen wir keine 9mm sondern die 38er Magnum unter den Such-/Ersetzen-Werkzeugen: preg_replace

Du musst also erstmal Reguläre Ausdrücke lernen. Wenn du vorher mit str_replace() auskamst und es nur um das Limit geht, ist das aber kein großes Problem. Du solltest dir allerdings bewusst sein das Reguläre-Ausdrücke um längen langsamer sind als ein str_replace(), somit ist die gesammte Vorgehensweise an dein Problem u.U. nicht optimal und es existiert vielleicht eine bessere Lösung, das kann ich aber an Hand dessen was du oben genannt hast nicht beurteilen.