Christian Kruse: Werte aus Textdatei exhumieren

Beitrag lesen

problematische Seite

Hallo Henry,

passt ja schon grösstenteils <trkpt.*="(.*)".*"(.*)".*>

Nein. Erwähnte ich schon Whitespace? <trkpt lat = "53.188185" lon = "7.216993"></trkpt>

Was soll das hier? Ich sagte doch schon Anpassungen sollte eigentlich jemand vornehmen, der mehr Übung in Sachen regex hat.

Als jemand, der sich ausgesprochen gut mit Regexen auskennt (sogar soweit, dass ich mal eine Engine dafür implementiert habe, um mein Verständnis zu verbessern) lass dir sagen: parse niemals XML (oder HTML) mit Regexen. Du wirst dir früher oder später eine blutige Nase holen. Das ist die Quintessenz aus allen meinen Erfahrungen damit. Ich verstehe, dass es dir sauer aufstösst, wenn dir jemand sagt „die Lösung war kacke,“ aber ich will dir nichts böses damit, im Gegenteil: ich erspare dir Stunden von Schmerzen.

Warum kommst du immer wieder mit neuen Ausnahmen, obwohl du weisst, dass diese relativ leicht einzubauen sind.

Weil man sie immer wieder einbauen muss. Jedesmal, wenn z.B. die Version des XML-Serializers, der genutzt wird diese Daten zu erzeugen, sich ändert, kann sich auch die Schreibweise ändern. XML ist ausgesprochen flexibel und lässt Unmengen von sich äquivalenten Schreibweisen zu.

Natürlich kannst du jetzt hingehen und jedesmal deinen Algorithmus anpassen. Und irgendwann hast du dann einen vollwertigen XML-Parser implementiert. Aus deiner Abkürzung mit den Regexen ist dann ein grosses Projekt geworden. Nur - wofür? XML-Parser gibt es bereits in ausreichender Menge, das ist ein gelöstes Problem.

[…] eben was wenn es kein XML ist oder die XML Datei falsch aufgebaut...

Wenn es kein XML ist, verwendet man ein anderes Tool um die Daten zu parsen. Das Argument ist doch nicht „verwende immer XML-Parser,“ das hat Gunnar nicht gesagt und Dedlfix und ich auch nicht. Das Argument ist „verwende das richtige Tool für den richtigen Job.“

Ach, und wie macht ein XML-Parser das?

Aus XML-Quellcode sowas wie ein DOM generieren vielleicht?

Durch Zauberei oder doch viell. auch durch Befehle, evtl. reguläre Ausdrücke?

Wenn du wissen möchtest, wie XML-Parser funktionieren, schau dir XML-Parser an. Deren Sourcen sind idR offen, das sind aber auch ziemlich komplizierte Stücke Software. Meistens werden jedoch keine regulären Ausdrücke verwendet, sondern ein vollständiger Parser-Stack inklusive Lexer. Der Lexer kann Regexe zur Hilfe nehmen, um XML in Tokens zu zerlegen, aber er wird nicht XML mit Regexen parsen so wie du es hier tust.

LG,
CK

0 145

Werte aus Textdatei exhumieren

Linuchs
  • php
  • programmiertechnik
  1. 1
    Rolf B
    1. 0
      Gunnar Bittersmann
      1. 0
        dedlfix
      2. 0
        pl
        1. 0
          Gunnar Bittersmann
          1. 0
            pl
            1. 0
              Gunnar Bittersmann
              1. 0
                pl
                1. 2
                  ThomasM
                  1. 0
                    pl
                    1. 0
                      ThomasM
  2. -2
    Henry
    • php
    • programmiertechnik
    • regex
    1. 2
      dedlfix
      1. 0
        Henry
        • meinung
        • php
        • regex
        1. 0
          dedlfix
          1. 0
            Henry
        2. 2
          Gunnar Bittersmann
          1. 0
            Henry
            1. 0
              Gunnar Bittersmann
            2. 5
              dedlfix
              1. 0
                Gunnar Bittersmann
              2. 0
                Henry
                1. 1
                  dedlfix
                  1. 0
                    Henry
                    1. 1
                      Gunnar Bittersmann
                      1. 0
                        Henry
                        1. 0
                          Gunnar Bittersmann
                          1. 0
                            Henry
                            1. 4
                              Christian Kruse
                              1. 2
                                Mitleser
                              2. 0
                                Henry
                                1. 1
                                  Christian Kruse
                                  1. 0
                                    Henry
                                    1. 0
                                      Robert B.
                                    2. 0
                                      pl
                                    3. 0
                                      Auge
                                  2. 0

                                    HTML parsen

                                    Henry
                                    • html
                                    • php
                                    • regex
                                    1. 0
                                      dedlfix
                                      1. 0
                                        Henry
                                        1. 0
                                          dedlfix
                                          1. 0
                                            Henry
                                            1. 0
                                              Henry
                                              1. 0
                                                Henry
                                                1. 0
                                                  dedlfix
                                                  1. 0
                                                    Henry
                                                    1. 0
                                                      Auge
                                                    2. 0
                                                      dedlfix
                                                      1. 0
                                                        Rolf B
                                                      2. 0
                                                        Henry
                                                        1. 0
                                                          dedlfix
                                                          1. 0
                                                            Henry
                                                            1. 0
                                                              dedlfix
                                                              1. 0
                                                                JürgenB
                                2. 0
                                  pl
                                3. 1
                                  dedlfix
                            2. 0
                              Gunnar Bittersmann
                              • browser
                              • zu diesem forum
                              1. 0
                                Christian Kruse
                            3. 0
                              Gunnar Bittersmann
                              1. 1
                                JürgenB
                              2. 0
                                Gunnar Bittersmann
                                1. 1
                                  JürgenB
                                2. 0
                                  Henry
                                  1. 0
                                    Robert B.
                                  2. 1
                                    Gunnar Bittersmann
                        2. 0
                          Robert B.
                2. 1
                  Gleiter
                  1. 0
                    Henry
                    1. 0
                      Gleiter
                  2. 0
                    JürgenB
                    1. 0
                      dedlfix
                      1. 0
                        JürgenB
                        1. 0
                          pl
                          1. 0
                            JürgenB
                            1. 0
                              Mitleser
                              1. 0
                                JürgenB
                                1. 0
                                  Mitleser
                                  1. 0
                                    pl
                                    1. 0
                                      JürgenB
                                      1. 0
                                        Auge
                                        1. 0
                                          dedlfix
                                          1. 0
                                            Auge
                                            1. 0
                                              JürgenB
                                              1. 0
                                                dedlfix
                                                1. 2
                                                  Rolf B
                                                  • humor
                                                  • meinung
                                                  1. 0
                                                    pl
                                                    1. 1
                                                      Tabellenkalk
                                                      1. 0
                                                        pl
                                                      2. 0
                                                        Rolf B
                                                        • mathematik
                                                        • meinung
                                                      3. 0

                                                        lon/lat precision

                                                        pl
                                                        1. 0
                                                          JürgenB
                                                          1. 0
                                                            Auge
                                                            1. 0
                                                              JürgenB
                                                              1. 0
                                                                pl
                                                            2. 0
                                                              Matthias Apsel
                                                              1. 0
                                                                MudGuard
                                                          2. 0
                                                            pl
                                                            1. 0
                                                              JürgenB
                                                              1. 0
                                                                Tabellenkalk
                                                                1. 0
                                                                  JürgenB
                                                          3. 0
                                                            Gunnar Bittersmann
                                                            1. 0
                                                              JürgenB
                                                              1. 0
                                                                Robert B.
                                                                1. 0
                                                                  Tabellenkalk
                                                                  1. 0
                                                                    Gunnar Bittersmann
                                                                    1. 0
                                                                      Tabellenkalk
                                                                      1. 0
                                                                        Robert B.
                                                                        • humor
                                                                        • mac
                                                                        • meinung
                                                                    2. 0
                                                                      Regina Schaukrug
                                                                      1. 0
                                                                        Mitleser
                                                                2. 0
                                                                  JürgenB
                                                                  1. 0
                                                                    Robert B.
                                                                    1. 0
                                                                      JürgenB
                                                                3. 1
                                                                  Matthias Apsel
                                                                  1. 0
                                                                    Robert B.
                                                                    • humor
                                                                    • meinung
                                                                    • selfhtml-wiki
                                                                    1. 0
                                                                      Gunnar Bittersmann
                                                                      1. 0
                                                                        Matthias Apsel
                                                                        1. 0
                                                                          Gunnar Bittersmann
                                                                          1. 0
                                                                            Matthias Apsel
                                                                            1. 0
                                                                              Gunnar Bittersmann
                                                                          2. 0
                                                                            Rolf B
                                                                            1. 0
                                                                              Gunnar Bittersmann
                                                              2. 0
                                                                pl
                                                            2. 0
                                                              Matthias Apsel
                                                              • humor
                                                    2. 0
                                                      Rolf B
                                                      1. 0
                                                        pl
                                      2. 0
                                        pl
                                2. 0
                                  pl
                                3. 0
                                  dedlfix
                            2. 0
                              pl
                    2. 0
                      Gunnar Bittersmann
                    3. 0
                      Gleiter
                      1. 0
                        JürgenB
        3. 2
          Christian Kruse
        4. 0
          Robert B.
          1. 0
            Henry
    2. 0
      Robert B.
    3. 0
      t-rex rox
      1. 1
        Gunnar Bittersmann
  3. 2
    ThomasM
    1. 0
      Rolf B
      1. 0
        Gunnar Bittersmann
  4. 0
    JürgenB
    1. 0
      pl
      1. 0
        JürgenB
        1. 0
          pl