tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
348
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    Hey,
    ich lese gerade Textdateien mittels php ein und ich muss gewisse wörter ersetzen, oder besser gesagt nur vor ihnen und nach ihnen etwas einfügen.

    Bisher sieht es so aus :

    PHP-Code:
    $replace = array("straße""bahn""opa""hallo");
    $place = array("12straße12""12bahn12""12opa12""12hallo12");
    $text = [...];
    $new str_replace($replace$place$text); 
    Wie man leicht erkennt weisen die Zeichen, die ich vor und nach den wörtern einfügen will alle Ähnlichkeit zueinander auf. Das Ganze wird zwar noch komplizierter, aber ich denke das reicht als Beispiel. Jedenfalls ist mir das bei so einigen hundert Wörtern, die ich ersetzen will, ein bisschen lästig und ich finde auch extrem Speicherlastig.
    Also meine Frage ist nun: gibts eine Möglichkeit das ganze viel effizienter zu machen, wie "Wenn das Wort im String enthalten, dann füge vor und nach dem Wort folgendes ein."
    Ihr würdet mir und besonders meinem Quelltext sehr helfen. Möglicherweise auch der Laufzeit.

    Gruß Jennesta
     

  2. #2
    Avatar von Loomis
    Loomis Loomis ist offline Mitglied Bunt
    Registriert seit
    Jul 2002
    Ort
    Aschaffenburg
    Beiträge
    1.538
    Hi,

    wenn es nach der Geschwindigkeit geht, dürfte str_replace() das wohl am schnellsten erledigen.
    Mit Regulären Ausdrücken und den entsprechenden Funktionen (preg_replace() bzw. ereg_replace()) geht das dann um einiges langsamer. (Quelle 1 und Quelle 2)
    Meine Frage wäre dann, wie genau stellst du dir das vor das ganze "effizienter" zu gestalten? Oder: Wie würde ein "kompliziertes" Beispiel denn aussehen? Vielleicht gibt es ja auch eine ganz andere Lösung, das allerdings kann man nur sagen wenn man weis was genau das werden soll.
     
    mfg
    --------------------------------------------------------------------------------
    Kein Support via PN, Email, ICQ, Brieftaube oder Flaschenpost!

    Besucht den tutorials.de-Chat | Anleitung
    RTFM - PHP-Handbuch - MySql Handbuch
    --------------------------------------------------------------------------------
    Surftipp...Der Postillon
    --------------------------------------------------------------------------------
    Signatur v2.2

  3. #3
    Registriert seit
    Dec 2002
    Ort
    Trier
    Beiträge
    17.502
    Blog-Einträge
    10
    Du wirst wohl kaum mit weniger als O(n*m) auskommen. Aber wozu brauchst du das überhaupt?
     
    Markus Wulftange

  4. #4
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    Ja effizienter galt hauptsächlich für mich, weil wenn ich jedesmal so ca 20-40Zeichen vor und nach sonem Wort schreiben muss und das bei mehreren hundert Wörtern ist ja recht viel des ganzen Quelltextes redundant.
    Das ganze hat quasi so ein bisschen Stil von einem Syntax_highlighter. Nun weiß ich selbst, wie auch anderen gesagt wurde, "Warum das Rad neuerfinden?", aber hätte ja klappen können, dass ich mir das leben etwas erleichtere.
    Komplizierter in der Hinsicht, dass nicht nur statische Zeichen vor und anchher hinzugefügt werden, sondern Variablen, die CSS enthalten, jenachdem wie ich das selbst festlege außerhalb.
     

  5. #5
    Registriert seit
    Mar 2004
    Beiträge
    1.856
    Blog-Einträge
    2
    Wenn das so ist dann versuchen wir mal was:
    PHP-Code:
    $text "Ich könnte mich nicht erinnern.";

    $a = array(
      
    'W',
      
    'Ö',
      
    'R',
      
    'T',
      
    'E',
      
    'R'
    );

    foreach(
    $a as $s)
    {
      
    $text str_replace($s'24' $s '24'$text);

    Sind wir noch bei O(n*m) ?
    Oder O(n² * m) ?

    Edit: Ich denke O(n² * m). str_replace läuft n Zeichen durch und ersetzt t Fundstellen. t <= n demnach ist str_replace O(n²). foreach läuft m Elemente durch und liefert Theta(m). Macht insgesamt O(n² * m). Sag mir bitte jemand, dass das stimmt
    Geändert von ZodiacXP (11.08.09 um 20:41 Uhr)
     
    Gebe keine Hilfe per PN, Mail, Instant Messenger etc.
    und keine Copy&Paste-Lösungen - ein bisschen selbst nachdenken sollte drin sein. Konstruktivismus 4tw!


    MfG, Zod

    __________________
    rpd Framework: Rapid Web-Engineering in PHP (Manual | Google Code)

  6. #6
    Avatar von Jennesta
    Jennesta Jennesta ist offline Mitglied Gold
    Registriert seit
    Sep 2007
    Ort
    Aachen
    Beiträge
    215
    Diese Lösung kommt glaube ich genau nach dem was ich mir vorgestellt habe, wusste ja nicht, dass ich die Variablen dort so einfach mit dem Punkt aneinanderketten kann. So gehe ich das ganze zwar mehrmals durch, aber irgendwo muss man ja Abstriche machen , zumal ich so aber auch noch mehr Einfluss auf das zu Ersetzende nehmen kann.

    Hmm ich weiß nicht genau wie str_replace arbeitet aber ich glaube da ist n² schon richtig. Also so extrem genau nehme ich es mit der Laufzeit auch nicht, aber man möchte es ja schon gerne gut und erweiterbar haben
     

Ähnliche Themen

  1. Mehrere Wörter ersetzen
    Von alex130 im Forum PHP
    Antworten: 4
    Letzter Beitrag: 03.08.08, 15:01
  2. Bestimmte Wörter in einer Textdatei ersetzen
    Von Fr3dd1 im Forum Visual Basic 6.0
    Antworten: 5
    Letzter Beitrag: 15.03.07, 16:54
  3. Mehrer Wörter in einem String ersetzen
    Von Imion im Forum Visual Basic 6.0
    Antworten: 2
    Letzter Beitrag: 16.06.06, 20:20
  4. String durchsuchen und Wörter ersetzen
    Von schutzgeist im Forum PHP
    Antworten: 2
    Letzter Beitrag: 20.01.06, 14:54
  5. Bestimmte Wörter ersetzen
    Von NoGFX im Forum PHP
    Antworten: 1
    Letzter Beitrag: 14.09.05, 12:51