String mit .txt-Datei vergleichen + ersetzen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • String mit .txt-Datei vergleichen + ersetzen

    Hallo zusammen,

    ich möchte folgendes umsetzen, aber irgendwie fehlt mir noch die zündende Idee.

    Ich habe eine .txt-Datei in der diverse Begriffe und Buchstabenkombinationen stehen, die jeweils mit Kommata getrennt sind.
    txt-Datei: begriff1a,begriff1b,...

    Des Weiteren habe ich einen String, der einen bis x Begriffe enthält, die jeweils durch ein Leerzeichen getrennt sind.
    String: begriff2a begriff2b ...

    Jetzt möchte ich für jeden einzelnen Begriff aus dem String überprüfen, ob eine Übereinstimmung mit irgendeinem der Begriffe aus der txt-Datei besteht. Ist dies der Fall, soll der betroffene Begriff aus dem String entfernt werden.

    Mit preg_replace() habe ich es leider nicht hinbekommen.

    Würde mich sehr freuen, wenn mir jemand mal einen Denkanstoß geben könnte, gerne auch in Code-Form...

    Danke im voraus und viele Grüße
    Langer

  • #2
    Re: String mit .txt-Datei vergleichen + ersetzen

    Würde mich sehr freuen, wenn mir jemand mal einen Denkanstoß geben könnte, gerne auch in Code-Form...
    es geht ... mit explode beide texte aufteilen in arrays, dann mit array_diff (string - textdatei) bearbeiten, ...

    array_diff() gibt ein Array mit allen Werten von string, welche nicht in textdatei enthalten sind, zurück.

    http://www.php-resource.de/manual.ph...ion.array-diff
    Die Zeit hat ihre Kinder längst gefressen

    Kommentar


    • #3
      Hallo,

      schonmal danke für den Tipp.

      $noise enthält ein Array mit den Begriffen, die aus dem Array $suchstring entfernt werden sollen

      Einlesen und explode funktioniert ohne Probleme. Wenn ich die beiden Arrays allerdings vergleiche, wirft er mir die in $noise enthaltenen Begriffe aus $suchstring nicht raus. Das Array $suchstring_diff stimmt mit dem Array $suchstring aber vollkommen überein.

      PHP-Code:
      $noisedatei "noise.txt";
      $txt fopen($noisedatei,"r");

      $noise fread ($txtfilesize ($noisedatei));
                          
      fclose($txt);
                          
      $suchstring explode (" "$suchstring);

      $noise explode (","$noise);

      $suchstring_diff array_diff ($suchstring$noise);

      print_r($suchstring_diff); 
      Hat noch jemand eine Idee, was da falsch sein könnte?

      Danke im voraus und viele Grüße
      Langer
      Zuletzt geändert von langerxxx; 02.08.2004, 16:02.

      Kommentar


      • #4
        Wenn ich die beiden Arrays allerdings vergleiche, wirft er mir die in $noise enthaltenen Begriffe aus $suchstring nicht raus. Das Array $suchstring bleibt unverändert bestehen.
        ja, so ist es auch vorgesehen. die funktion gibt das erzeugte array zurück, die originale bleiben unverändert. wo ist das problem?
        Die Zeit hat ihre Kinder längst gefressen

        Kommentar


        • #5
          Oh, sorry, da hab ich mich falsch ausgedrückt!

          In $suchstring_diff steht das gleiche wie in $suchstring, auch wenn es definitv übereinstimmende Begriffe zwischen $noise und $suchstring gibt...

          Danke und viele Grüße
          Langer

          Kommentar


          • #6
            nein!

            ich habs doch eben noch einmal ausprobiert, bei mir funktioniert es ...

            hast du beide arrays mal per var_dump ausgegeben?
            sind elemente wirklich gleich?
            eventuell trim() angewendet?
            ...
            Die Zeit hat ihre Kinder längst gefressen

            Kommentar


            • #7
              Thx für den Hinweis, eine Fehlerquelle ist schonmal rausgefallen. Da hatten sich tatsächlich Leerzeichen aus der txt-Datei eingeschlichen.

              Ich habe jetzt mal beide Arrays mit var_dump ausgegeben. Was merkwürdig ist:

              Eintrag zu "Ihre" aus $suchstring:
              [0]=> string(4) "Ihre"

              Eintrag zu "Ihre" aus $noise:
              [20]=> string(11) "Ihre"

              Zusatz von 18:09 h:

              Ich habe mir gerade mal den zugehörigen HTML-Quelltext zu var_dump angeschaut, da wird "Ihre" folgernmaßen dargestellt:
              [20]=> string(11) " I h r e "

              Wenn ich es recht verstehe, sind die enthaltenen Buchstaben gleich, aber durch die unterschiedliche Länge sind die String trotzdem nicht gleich.

              Woran könnte das liegen? Kann man das irgendwie korrigieren?

              Danke und viele Grüße
              Langer
              Zuletzt geändert von langerxxx; 02.08.2004, 18:14.

              Kommentar


              • #8
                probier mal
                PHP-Code:
                for ($i=0$i<strlen($noise[20]); $i++)
                  echo 
                'Char: ['.$noise[20][$i].'] - Code:'.ord($noise[20][$i]).']<br />'
                ausgabe?

                edit:
                zugehörigen HTML-Quelltext zu var_dump angeschaut
                der ausgabe im browser solltest du in solchen fällen niemals trauen, immer in den quellcode schauen ...

                dann such die stelle, wo der code das erzeugt, was du nicht willst ...
                Zuletzt geändert von derHund; 02.08.2004, 18:15.
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  PHP-Code:
                  $noise explode (","$noise); 
                  sowas ist auch immer sehr unelegant ...
                  Die Zeit hat ihre Kinder längst gefressen

                  Kommentar


                  • #10
                    Hallo,

                    die Ausgabe ist folgende:

                    Char: [] - Code:0]
                    Char: [I] - Code:73]
                    Char: [] - Code:0]
                    Char: [h] - Code:104]
                    Char: [] - Code:0]
                    Char: [r] - Code:114]
                    Char: [] - Code:0]
                    Char: [e] - Code:101]
                    Char: [] - Code:0]
                    Char: [] - Code:0]
                    Char: [] - Code:0]


                    Ähnlich wie im HTML-Quelltext, was ich im obigen Beitrag noch ergänzt hatte. D.h. er setzt in den String irgendwelche Zeichen rein.

                    Leerzeichen scheinen es ja nicht zu sein, die werden über
                    PHP-Code:
                    $noise preg_replace("/\s/s","",$noise); 
                    ja bereits entfernt.

                    Oh man... Wie kann man die "überflüssigen" Zeichen denn entfernen?

                    Danke dir schonmal super viel für deine bisherige Hilfe!!!!

                    Viele Grüße
                    Langer

                    Kommentar


                    • #11
                      PHP-Code:
                      $noise explode (","$noise); 
                      sowas ist auch immer sehr unelegant ...
                      In wie fern unelegant?


                      dann such die stelle, wo der code das erzeugt, was du nicht willst ...
                      Tja, gute Frage. Eigentlich kann es da nur eine Stelle geben. Das wäre dann das auslesen der txt-Datei... Aber im txt-Format sollten doch eigentlich keine überflüssigen Zeichen stehen...

                      Danke und Gruß
                      Langer

                      Kommentar


                      • #12
                        häng mal bitte die noise.txt dran, und zeig deinen gesamten, verarbeitenden code ...
                        Leerzeichen scheinen es ja nicht zu sein,
                        nee ^^

                        versuch mal, per replace das zeichen chr(0) zu entfernen ...

                        unelegenat ist imho,

                        weil du den string nach array castest und dann überschreibst, naja, steh ich halt nicht so drauf ...
                        Die Zeit hat ihre Kinder längst gefressen

                        Kommentar


                        • #13
                          @derHund:

                          Thx für deine Hilfe. Das Problem liegt wirklich am auslesen der txt-Datei. Aus irgendeinem Grund setzt PHP dabei dieses chr(0) zwischen die Buchstaben.

                          Ich habe daraus jetzt einfach eine php-Datei gemacht und den String in eine Variable geschrieben.

                          Jetzt funktioniert alles wunderbar!

                          Danke vielmals, ohne deine Hilfe hätte ich das nicht hinbekommen!

                          Grüße
                          Langer

                          Kommentar


                          • #14
                            Original geschrieben von langerxxx
                            Aus irgendeinem Grund setzt PHP dabei dieses chr(0) zwischen die Buchstaben.
                            na ja, ich frage mich sowieso, warum du für das auslesen einer ASCII-datei die funktion fread nutzt, die für das auslesen von binärdaten gedacht ist ...?
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Danke vielmals,
                              bitte, bitte.
                              Die Zeit hat ihre Kinder längst gefressen

                              Kommentar

                              Lädt...
                              X