Ankündigung

Einklappen
Keine Ankündigung bisher.

preg_match_all Problem

Einklappen

Neue Werbung 2019

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

  • preg_match_all Problem

    Hallo, ich versuche gerade mit preg_match_all eine txt-Datei eines Spiels auszulesen. Darin finde ich Informationen über Items und dessen Eigenschaften.

    Das ganze hat bis jetzt auch recht gut geklappt, aber nun komme ich einfach nicht mehr weiter. Ich habe einen String ($source) mit einer Aneinanderreihung von Werten und Namen innerhalb von Anführungszeichen.


    Ich möchte in $matches den Wert in Anführungszeichen von $source erhalten, der $name folgt.


    Beispiel für $source:


    "Name1" "Wert1" "Name2" "Wert2"

    Ist $name jetzt also 'Name1' möchte ich in $matches alle Wert erhalten, die $name folgen.



    Ich bin bisher so vorgegangen:


    preg_match_all("="$name"\s+"[^>](.*)"=siU", $source, $matches);


    Dabei erhalte ich leere Arrays. Da ich nicht weiß ob ich $name da einfach reinpacken darf, habe ich das auch noch mit einem Namen wie 'Name1' aus dem beispiel ausprobiert, ohne Erfolg.

    preg_match_all("="Name1"\s+"[^>](.*)"=siU", $source, $matches);



    Ich bin mir recht sicher, dass es am Pattern liegt, aber die 'Anleitung' auf php.net konnte mir bisher nicht weiterhelfen.




    Schon mal Danke im Voraus.


    J.LI

  • #2
    Das Beste wäre wohl, wenn Du mal eine Beispieldatei zeigst. Vielleicht handelt es sich ja um eine geläufige Notationsstruktur, die man schnell konvertieren kann.

    So wie bisher beschrieben habe ich den unguten Verdacht, dass Du evtl. nötige Details nicht erwähnst und jede Mühe zu helfen dann doch vergebens ist.

    [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

    Kommentar


    • #3
      @drsoong
      Hier ein Ausschnitt:


      "PaintKit_so_grassland_Tag" "Grassland"


      Jetzt muss man sich das einfach nur noch paar tausend mal hintereinander vorstellen, schon hat man den Inhalt der txt.


      Kommentar


      • #4
        Ich habe es jetzt praktisch hinbekommen. Das Problem ist nur noch, dass php das letzte Anführungszeichen vorziehen, und ich deshalb praktisch den kompletten String erneut erhalte.

        Kommentar


        • #5
          preg_quote() wird gerne vergessen. Das Pattern funktioniert dann für den Fall nicht mehr, wenn $name reservierte Zeichen enthält.
          PHP-Code:
          $pattern '~"'.preg_quote($name,"~").'"\s+"(.+)"~iuU'

          Kommentar


          • #6
            Es wäre vermutlich einfacher mit explode() zu arbeiten
            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

            Kommentar


            • #7
              Oder ev. http://php.net/manual/de/function.fgetcsv.php ?
              The string "()()" is not palindrom but the String "())(" is.

              Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
              PHP.de Wissenssammlung | Kein Support per PN

              Kommentar


              • #8
                Jedenfalls mal wieder ein Fall von: „Ich habe ein Problem mit Code, den ich nicht zeige. Wo liegt der Fehler?“

                Liebe Threadersteller, schreibt doch bitte einfach testbare Beispiele mit Demo-Eingabedaten und eurem Ansatz und sagt genau, was ihr als Ergebnis haben wollt und was ihr aktuell erhaltet.

                Kommentar


                • #9
                  Jetzt muss man sich das einfach nur noch paar tausend mal hintereinander vorstellen, schon hat man den Inhalt der txt.
                  Steht das alles in einer Zeile oder zeilenweise ein Name/Wert-Paar?

                  Stehen dort tatsächlich nur diese Daten oder gehen den Daten noch irgendwelche Kommentare voraus oder folgen irgendwelche Texte, die nicht verwertet werden müssen?

                  Ansonsten siehe #8 von mermshaus.
                  [B]Es ist schon alles gesagt. Nur noch nicht von allen.[/B]

                  Kommentar


                  • #10
                    Zitat von mermshaus Beitrag anzeigen
                    Jedenfalls mal wieder ein Fall von: „Ich habe ein Problem mit Code, den ich nicht zeige. Wo liegt der Fehler?“

                    Liebe Threadersteller, schreibt doch bitte einfach testbare Beispiele mit Demo-Eingabedaten und eurem Ansatz und sagt genau, was ihr als Ergebnis haben wollt und was ihr aktuell erhaltet.
                    "PaintKit_so_grassland_Tag" "Grassland"


                    Jetzt muss man sich das einfach nur noch paar tausend mal hintereinander vorstellen, schon hat man den Inhalt der txt.

                    Ist das so schwer zu verstehen? Sieht ungefähr so aus:


                    "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland" "PaintKit_so_grassland_Tag" "Grassland"

                    Kommentar


                    • #11
                      Zitat von J.LI Beitrag anzeigen
                      ...
                      Ist das so schwer zu verstehen? Sieht ungefähr so aus:
                      ...
                      achso ... so sieht das also aus. Ich dachte schon Du willst ein CS:GO File auslesen ... das wäre total easy. Aber das scheint bei Dir dann ja was anderes zu sein
                      Heilung bei codebedingtem Augenkrebs

                      Kommentar


                      • #12
                        Nur mal als Schnellschuß:
                        PHP-Code:
                        $aChunked array_map(
                                function( 
                        $val ) {
                                    return 
                        trim$val'"' );
                                }
                                , 
                        explode'" "'file_get_contents('datei.txt') )
                            );


                        $aKeyValuePair = array();


                        foreach ( 
                        $aChunked as $key=>$value ) {

                            if ( !
                        $key%) {

                                
                        $aKeyValuePair[$value] = $aChunked[$key+1];
                                continue;

                            }

                        }


                        print_r$aKeyValuePair ); 
                        Hast natürlich ein Problem, wenn Keys doppelt vorkommen!
                        Aber wie Dir bereits gesagt wurde, mit detaillierteren Infos, kann man sicher mehr helfen.

                        Jetzt muss man sich das einfach nur noch paar tausend mal hintereinander vorstellen, schon hat man den Inhalt der txt.

                        Ist das so schwer zu verstehen? Sieht ungefähr so aus:
                        Vergiss bitte nicht, daß wir hier freiwillig helfen. Wenn wir weitere Infos benötigen, um Dir weiter zu helfen, solltest Du die liefern. Ansonsten haben die Helfer hier nicht wirklich Bock, sich weiter mit Deinem Problem auseinanderzusetzen.
                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #13
                          Zitat von nimmneun Beitrag anzeigen

                          achso ... so sieht das also aus. Ich dachte schon Du willst ein CS:GO File auslesen ... das wäre total easy. Aber das scheint bei Dir dann ja was anderes zu sein

                          Wo gibt es da bitte einen Unterschied?

                          Kommentar


                          • #14
                            Zitat von J.LI Beitrag anzeigen
                            Wo gibt es da bitte einen Unterschied?
                            Da sieht die Formatierung eher so aus https://raw.githubusercontent.com/tw...go_english.txt
                            Spricht immer ein "Paar" pro Zeile und durch Tabs getrennt. Ungefähr so:

                            Code:
                                    "SFUI_BuyMenu_AlreadyPurchased"            "You already purchased one this round."
                                    "SFUI_BuyMenu_NotAllowedByMap"            "Not allowed on this map type."
                                    "SFUI_BuyMenu_NotAllowedByMode"            "Not allowed in this game mode."
                                    "SFUI_BuyMenu_NotAllowedByTeam"            "Not allowed on your current team."
                            Aber bei dem Format ist z.B. eher preg_match() innerhalb von nem foreach loop besser, weil man da Zeilenweise arbeiten kann, indem man die Datei z.B. mit file() in ein Array liest. Musst mal schaun obs bei dir da vllt. auch ne Möglichkeit gibt. Ist schwer zu beurteilen, bzw. ein Ratespiel, ohne ein echtes Beispiel.
                            Heilung bei codebedingtem Augenkrebs

                            Kommentar


                            • #15
                              Zitat von nimmneun Beitrag anzeigen

                              Da sieht die Formatierung eher so aus https://raw.githubusercontent.com/tw...go_english.txt
                              Spricht immer ein "Paar" pro Zeile und durch Tabs getrennt. Ungefähr so:

                              Code:
                              "SFUI_BuyMenu_AlreadyPurchased" "You already purchased one this round."
                              "SFUI_BuyMenu_NotAllowedByMap" "Not allowed on this map type."
                              "SFUI_BuyMenu_NotAllowedByMode" "Not allowed in this game mode."
                              "SFUI_BuyMenu_NotAllowedByTeam" "Not allowed on your current team."
                              Aber bei dem Format ist z.B. eher preg_match() innerhalb von nem foreach loop besser, weil man da Zeilenweise arbeiten kann, indem man die Datei z.B. mit file() in ein Array liest. Musst mal schaun obs bei dir da vllt. auch ne Möglichkeit gibt. Ist schwer zu beurteilen, bzw. ein Ratespiel, ohne ein echtes Beispiel.

                              Ich lese die Datei mit file_get_contents ein. Dabei ignoriert php die Zeilenumbrüche sowieso irgendwie. Ich habe eben aus vorherigen Prozessen einen Namen, den ich von 'CSGO' in 'Englisch' übersetzen will.

                              Das mit file(), preg_match() und einem loop zu machen ist aber eine echt gute Idee, danke. Werde ich gleich mal versuchen.

                              Kommentar

                              Lädt...
                              X