Ankündigung

Einklappen
Keine Ankündigung bisher.

String suchen und ersetzen

Einklappen

Neue Werbung 2019

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

  • String suchen und ersetzen

    Hallo,
    ich arbeite gerade an meinem ersten großen Projekt.
    Ich schreibe ein Webinterface für gameserver und bräuchte da mal hilfe.

    Ich möchte auf der Website mehrere Textfelder anzeigen und damit dann einzelne Werte in einer .cfg Datei bearbeiten.

    Der Aufbau sieht ungefähr so aus:
    Code:
    hostname "TestServer"
    mp_freezetime "3"
    mp_friendlyfire "0"
    mp_limitteams "30"
    mp_logecho "0"
    mp_logfile "1"
    mp_maxrounds "0"
    mp_roundtime "4"
    mp_spawnprotectiontime "3"
    mp_startmoney "900"
    mp_timelimit "0"
    mp_tkpunish "0"
    Und mit folgender Methode möchte ich den hostname bearbeiten:

    PHP-Code:
    <?php
    function file_edit($file$trennzeichen$suche$neuerwert) {
    $test "";
    if ( 
    $fh fopen$file'r+' ) ) {
        
    // Durchlaufe Zeile für Zeile
        
    while( $current fgets$fh4096 ) ) {
              if (
    ereg($suche$current)) 
    {  
    list(
    $dummy$oldstring$tetsind) = explode$trennzeichen$current);
    $meinstring str_replace($oldstring$neuerwert$current);
    $test $test.$meinstring;
    }
    else
    {            
     
    $test $test.$current;
     }
        }
     
        
    fclose$fh );
     
     
    $fh fopen($file'r+');
    fwrite($fh$test);
    fclose($fh);
    }
    }
    file_edit("./test.cfg"'"'"hostname"'test');
    ?>
    Das Problem ist, ich kriege folgenden Wert in die Datei zurück:
    Code:
    hostname "test""
    Kann mir da vielleicht einer helfen, oder weiß einer ne bessere Idee um die daten zu bearbeiten?

  • #2
    Hallo!

    Also ich hoffe mal ich täusche mich nicht aber in der Zeile dürfte ein Fehler sein!

    PHP-Code:
    <?php
    $meinstring 
    str_replace($oldstring$neuerwert$current);
    ?>
    Astatt des $current müsste da glaube ich $meinstring rein!

    Ich hoffe ich irre mich nicht!
    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
    [URL]http://www.lit-web.de[/URL]

    Kommentar


    • #3
      Hmm aber meinstring ist ja leer. Current ist die aktuelle zeile und meinstring ist das ergebnis. Also glaube nicht, dass da der Fehler liegt.

      Kommentar


      • #4
        Aber wenn $meinstring leer ist warum machst dann ein str_replace darauf? Was soll denn da replaced werden?
        Einen str_replace auf eine leere Variable ist ziemlich Sinnlos oder?

        Dann müsste ich denke mal die Zeile so ausschauen!
        PHP-Code:
        <?php
        $current 
        str_replace($oldstring$neuerwert$current);

        //Und das Ergebnis so
        $test $test.$current;
        ?>
        Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
        [URL]http://www.lit-web.de[/URL]

        Kommentar


        • #5
          Habs ausprobiert, macht auch keinen unterschied.

          Kommentar


          • #6
            Hast du mal bevor du das str_replace ausführst eine Testausgabe gemacht ob in $current überhaupt was drin steht?

            Wie sollte das eigentliche Ergebnis aussehen was du erwartest?

            Wo kommt denn $oldstring her und als was setzt sich das zusammen?
            Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
            [URL]http://www.lit-web.de[/URL]

            Kommentar


            • #7
              Hab mit echo die jeweilige zeile ausgeben lassen, das hat funktioniert.

              Also ich habe dieses Ergebnis:
              Code:
              hostname "test""
              Diese möchte ich aber:
              Code:
              hostname "test"
              Da ist einfach ein Anführungszeichen zuviel. Aber ich weiß auch nicht ob das ganze so gut ist, wenn ich mehrere Teile ändern möchte. Wie das dann so mit der Performance aussieht.

              Kommentar


              • #8
                Diese Zeile hier ist für die Ausgabe zuständig? Oder sehe ich das falsch?

                PHP-Code:
                <?php
                file_edit
                ("./test.cfg"'"'"hostname"'test');
                ?>
                und dein Ergebnis ist das hier hostname ="test""

                Hmm ich vermute mal das damit was nicht stimmt 'test' denn was anderes kann ich mir nicht erklären weil das könnten zwei single quote sein oder auch nur ein double quote!

                Versuche mal den Teil hier , 'test' raus zu nehmen!

                Ob es daran liegt weis ich nicht aber ich vermute es!
                Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                [URL]http://www.lit-web.de[/URL]

                Kommentar


                • #9
                  Hab jetzt gemerkt ich muss mehrere zeilen in der config datei haben.

                  Wenn ich die Textdatei so habe:

                  Code:
                  
                  hostname "irgendwas"
                  Ergebnis: 
                  hostname "test""
                  
                  Und so:
                  CODE]
                  hostname "irgendwas"
                  fgdfg
                  gdrg
                  tgg
                  dt

                  Ergebnis:
                  hostname "test"
                  [/CODE]

                  Also müssen in der Datei wohl nur mehrere Zeilen sein.

                  Aber trotzdem frage ich mich ob dieses Verfahren wirklich sinnvoll ist oder ob jemand eine bessere Idee hat.

                  Kommentar


                  • #10
                    logisch. es gibt sehr schöne Datenspeicherungsformate. zum beispiel die daten serialisiert abzulegen, oder ein einfaches format wie json. oder ein mächtiges format wie xml.

                    und natürlich musst du nicht das rad neu erfinden:
                    PEAR :: Package :: Config
                    PHP: XML Parser - Manual
                    PHP: XMLWriter - Manual
                    PHP: JSON - Manual

                    Kommentar


                    • #11
                      PHP-Code:
                      file_edit("./test.cfg"'"'"hostname"'test'
                      Damit es bisschen sauberer aussieht, solltest du das da erstmal so schreioben :

                      file_edit("./test.cfg", "\"", "hostname", "test")
                      ODER
                      file_edit('./test.cfg', '"', 'hostname', 'test'')

                      Kommentar


                      • #12
                        war doppelt bitte löschen !

                        Kommentar


                        • #13
                          Das Problem ist ich möchte Config dateien editieren, die kann ich ja nicht einfach im XML Format speichern. Dann funktioniert der ganze gameserver nicht mehr. Und mir gehts nur darum ob das ganze so sinnvoll ist, da ich mehrere sachen editieren möchte und wie das dann mit der Performance aussieht.

                          Kommentar


                          • #14
                            dann würde ich vorschlagen, die einfachste lösung zu nehmen. leg dir ein template an mit

                            hostname=||HOSTNAME||
                            [etc pp.]

                            und baust die config datei immer komplett auf und änderst nicht nur werte

                            Kommentar


                            • #15
                              Ja keine schlechte Idee , nur das Problem ist, die Leute sollen ja erstmal in den Textfeldern die alten Werte sehen. Also muss ich die Werte erstmal auslesen, und beim speichern kommplett neu aufbauen. Auch nicht wirklich gut

                              Kommentar

                              Lädt...
                              X