Datei öffnen, StringS suchen, ersetzen, schreiben

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

  • Datei öffnen, StringS suchen, ersetzen, schreiben

    Hallo Gemeinde,

    habe ein Problem welches mir irgendwie keine Ruhe mehr laesst.
    Ich moechte in einer Datei (txt) nach unterschiedlichen (bestimmten) Woertern suchen, wie z.B.
    peter="5", peter="6", peter="7" . Diese Woerter moechte ich durch peter="10", peter="11", peter="12" ersetzen.

    Meine Gedanken dazu:

    PHP-Code:
    $fp fopen("test.htm"'r');
    while(!
    feof($fp))
    {
    $inhalt fgets($fp8);
    if (
    $inhalt "peter")
    {
    echo 
    fread($fp4);
    }
    else
    {
    fseek($fp, -7SEEK_CUR);
    }
    }
    fclose($fp); 
    Hier fehlt natuerlich noch das str_replace oder aehnliche Funktionen.
    Im Prinzip dachte ich mir ich gehe einfach Zeichen fuer Zeichen durch.
    So wie im Skript beschrieben,
    hole die ersten 8 Zeichen, sieh nach ob "peter" enthalten ist.
    Wenn ja, dann gib die naechsten 4 Zeichen aus.
    Falls nicht, dann gehe -7 zurueck.

    Ich muesste aber einer Stelle sicherlich einen break machen und die peter´s
    ersetzen?!

    preg_replace oder str_replace auf die gesamte datei funktioniert nicht, oder? Weil diese unterschiedliche sind, also die suchwoerter.

    Danke fuer eure Hilfe.
    Boardsuche benutzt, Google benutzt - ja ;-)
    Niveau sieht nur von unten aus wie Arroganz!

  • #2
    wie gross ist die datei?
    b.z.w wie gross kann sie werden?

    auch die PHP version ist wichtig
    Slava
    bituniverse.com

    Kommentar


    • #3
      Hallo,

      die Dateien werden dynamisch erstellt. Es laesst sich also immer schwer abschaetzen wie gross diese wirklich sind/werden.

      Wieso fragst du ? Es ist moeglich die gesamte Datei in einen String zu packen, mit file_get_contents funktioniert das.

      Nur leider bekomm ich damit mein Problem auch nicht in den Griff.
      Vielen Dank für die schnelle Antwort!
      Niveau sieht nur von unten aus wie Arroganz!

      Kommentar


      • #4
        Original geschrieben von Peter_Panther
        Nur leider bekomm ich damit mein Problem auch nicht in den Griff.
        preg_replace() mit modifikator e oder preg_replace_callback() kannst du dazu benutzen.

        war das oben nur ein bsp., oder möchtest du wirklich nur alle 'peter="zahl"' durch peter="zahl+5"' ersetzen?

        Kommentar


        • #5
          wenn die datei übersichtlich gross ist, kannst du problemlos der inhalt mit preg_replace zu behandeln und die datei wieder speichern.
          Slava
          bituniverse.com

          Kommentar


          • #6
            Original geschrieben von 3DMax

            war das oben nur ein bsp., oder möchtest du wirklich nur alle 'peter="zahl"' durch peter="zahl+5"' ersetzen?
            Ich werde es mal probieren. Es spielt eigentlich keine Rolle, im Prinzip koennte man auch diese zahl + 5 rechnen. Theoretisch wuerde das gehen.

            Hintergrund:
            Eine html-Datei in der verschiedene Links mit tabindex="zahl" angegeben. Damit 1. keine Doppelungen auftreten und 2. ich keinen Uberblick mehr habe, moechte ich alle bestehenden jetzt ordentlich durchnummerieren.

            Hilft diese Info weiter?! ;-)

            Slava:
            Bist du dir sicher? Also entweder ich habe dabei etwas falsch gemacht oder du stellst es dir vielleicht aehnlich einfach vor wie ich am Anfang? Sorry, soll keine Unterstellung sein.
            Zuletzt geändert von Peter_Panther; 03.01.2007, 21:33.
            Niveau sieht nur von unten aus wie Arroganz!

            Kommentar


            • #7
              Original geschrieben von Peter_Panther
              Wieso fragst du ?
              aus neugier?
              wenn die dateien 100mb gross sein können, dann muss man ganz anderen weg gehen als bei der dateien die 30 kb gross sind.
              ausserdem wenn du
              peter="7",peter="5",peter="2"
              durch peter="10" einfach so in der datei direkt überschreibst, dann bekommst du
              peter="10"peter="10"eter="2"
              also bei einem zeichen mehr muss du der rest von der ganzer datei irgendwo zwischenspeichern
              b.z.w muss du alles in eine andere datei speichern,
              alte datei löschen,
              die neue datei bekommt name von alter datei.
              Slava
              bituniverse.com

              Kommentar


              • #8
                Original geschrieben von Slava

                peter="7",peter="5",peter="2"
                durch peter="10" einfach so in der datei direkt überschreibst
                Genau das will ich nicht.
                peter="zahl1", peter="zahl2", peter="zahl3"

                soll ersetzt werden durch

                peter="wasanderes1", peter="wasanderes2" ...

                Es gibt da eine Funktion mit der man auch Arrays benutzen kann.
                Da habe ich versucht mit 2 for-Schleifen diese Stellen zu ersetzen.
                Niveau sieht nur von unten aus wie Arroganz!

                Kommentar


                • #9
                  so, ich versuch's nochmal.

                  Original geschrieben von Peter_Panther Hintergrund:
                  Eine html-Datei in der verschiedene Links mit tabindex="zahl" angegeben. Damit 1. keine Doppelungen auftreten und 2. ich keinen Uberblick mehr habe, moechte ich alle bestehenden jetzt ordentlich durchnummerieren.
                  also möchtest du alle gefundenen tabindex="irgendwas" durchnummerieren bzw. ersetzen von 1 bis anzahl fundstellen.

                  erstes tabindex="irgendetwas" -> tabindex="1"
                  zweites tabindex="irgendetwas" -> tabindex="2"
                  ... usw.

                  richtig verstanden?

                  Kommentar


                  • #10
                    Ja, genau!

                    Der Content der Seite wird von vielen Leuten erstellt. Es kann also vorkommen, dass im Header ein tabindex="10" und weiter untern (im Content eben) ploetzlich ein tabindex="2" steht. Will heissen,
                    die sind vorher (in der Rohdatei quasi) keinesfalls irgendwie geordnet nummeriert.
                    Niveau sieht nur von unten aus wie Arroganz!

                    Kommentar


                    • #11
                      der code sollte das machen, was du erreichen möchtest, wobei aber meiner meinung nach die tabindex nicht unbedingt geordnet sein müssen.
                      PHP-Code:
                      $content=file_get_contents('file.html');

                      $content=preg_replace('/tabindex="\\d+"/''tabindex="#"'$content);

                      if(
                      preg_match_all('/tabindex="#"/'$content$matches))
                       for(
                      $i=0$i<count($matches[0]); $i++)
                        
                      $content=preg_replace('/tabindex="#"/''tabindex="'.$i.'"'$content1); 

                      Kommentar


                      • #12
                        Danke fuer deine Hilfe!

                        Habe jetzt eine andere Moeglichkeit gefunden. Ueber preg_replace_callback funktioniert es auch super.

                        PHP-Code:
                        $content file_get_contents('datei.htm');
                            
                        $count 0;
                            function 
                        ersetzen($treffer)
                            {
                                global 
                        $count;
                                
                        $count++;
                                return 
                        $treffer[1].$count.$treffer[2];
                            }
                            echo 
                        preg_replace_callback('/(tabindex=").*?(")/'"ersetzen"$content
                        Ist vielleicht etwas besser als vorher alle zahlen durch # zu ersetzen. Zumal der Code auch etwas flexibler durch das tabindex=".*? ist.
                        Man weiss ja nie was die Pappenheimer in den tabindex reinklimpern ;-)
                        Niveau sieht nur von unten aus wie Arroganz!

                        Kommentar


                        • #13
                          Original geschrieben von Peter_Panther
                          Ist vielleicht etwas besser als vorher alle zahlen durch # zu ersetzen.
                          ja, hast recht, ich habs viel zu umständlich gelöst
                          aber warum einfach, wenns auch kompliziert geht

                          Kommentar


                          • #14
                            Okay, dann bin ich erstmal beruhigt

                            Im Prinzip ist mir das global $count noch ein Dorn im Auge.
                            Sowas soll man ja im Prinzip nicht machen, war mir aber auch eigentlich egal. Wahrscheinlich wie bei dir, es funktioniert ja ;-)

                            Also, vielen Dank nochmal!
                            Niveau sieht nur von unten aus wie Arroganz!

                            Kommentar


                            • #15
                              mit dem modifier e gehts auch:

                              $i=1;
                              $c=preg_replace('/tabindex="\d+"/e', "'tabindex=\"'.\$i++.'\"'", $c);

                              Kommentar

                              Lädt...
                              X