Reguläre Ausdrücke

Wir sammeln alle Infos der Bonusepisode von Pokémon Karmesin und Purpur für euch!

Zu der Infoseite von „Die Mo-Mo-Manie“

  • Da Excel leider csv-Dateien so verschlüsselt, dass sie nur fehlerhaft eingelesen werden (selbst wenn die Datei unverändert von Excel eingelesen wird, sowohl auf Windows als auch auf Mac), habe ich mich nun entschieden, von csv- auf xml-Dateien umzusteigen. Funktioniert auch alles ganz gut, ich kriege die einzelnen Zellen, allerdings schaffe ich es nicht, einen regulären Ausdruck zu erstellen, der mir nur den Inhalt der Zellen gibt. Aktuell sieht das Auslesen bei mir so aus:


    Das Problem liegt in Zeile 17, ich habe im Internet die Funktion (?:X) gefunden, die X zum matchen, aber nicht ins Ergebnis mit reinnimmt, wenn ich den regulären Ausdruck aber in (?:<Cell.*?>.*?<Data.*?>)(.*?)(?:</Data>.*?</Cell>) abändere, kriege ich immer noch das gleiche. Ich möchte nur den rot markierten Teil erhalten.


    Ich hoffe ihr könnt mir weiterhelfen!

  • QueFueMejor: Ah danke, ich hatte alle möglichen Zeichensätze ausprobiert, aber nicht den :D Vorteil: es wird mir genauso wie mit excel geparst. Nachteil: Excel parst äöü etc falsch :D Kann man das irgendwie schnell machen, oder muss ich da dann echt jeden einzelnen falsch geparsten buchstaben richtig ersetzen?
    @Proht Meyhet: Diese Möglichkeit habe ich bei Excel 2011 für Mac nicht und nach kurzer Recherche scheint mir es da auch keine vergleichbare zu geben...

  • Hmm, gibt es denn die Option im Speichern unter als Unicode .txt zu speichern ? Dem Streamreader dürfte das ja ziemlich egal sein, ob das Ding auf .csv oder .txt endet.
    Da die Datei in diesem Fall tabulaturgetrennt herauskommen wird, müsste du dein .split Aufruf dann so aussehen

    Code
    fileData.add(line.split("\t",-1));


    Ansonsten, wäre OpenCalc keine Alternative ?

  • Da meine XML-Datei immer sehr einfach bleiben wird, habe ich es nicht für notwendig gehalten, mich extra in einen XML-Parser einzuarbeiten. Theoretisch könnte ich ja auch den String vor dem Inhalt mit <Cell.*?>.*?<Data.*?> und nach dem Inhalt mit </Data>.*?</Cell> erhalten und dann mit replace einfach durch "" ersetzen, aber das finde ich nicht sonderlich sauber. Einen besseren RegEx-Ausdruck gibt es für so etwas aber nicht?

  • Für XML ist vermutlich ein Parser wesentlich besser als reguläre Ausdrücke.
    Da es dir ja offenbar in erster Linie ums Einlesen von Excel-Dateien geht, würde ich wohl zu Apache POI greifen, HSSF bis Excel 2003, XSSF ab Excel 2007. Damit kannst du die Excelmappen direkt bearbeiten und musst nicht den Umweg über andere Formate gehen.