.txt Tabelle(?) - StringRegExp?

  • Tag Leute...
    ich verzweifle jetzt schon seit Tagen. Ich möchte aus eine .txt Datei, die ungefähr so aussieht,
    [Blockierte Grafik: http://abload.de/img/unbenanntsjs3o.png]
    nur dir Nummern 1 - 3 auslesen. Ich dachte, das könnte ich mit StringRegExp machen. Leider hatte im damit bis zu diesem Zeitpunkt noch nicht viel am Hut...
    Und selbst nach Tage check ich's nicht...
    Kann mir da einer helfen?

  • Hey Schnieker,
    warum denn Stringregexp? Das sieht doch super formatiert aus. Sind das Tabs? Dann genügt es doch die .txt-Datei mit FileReadToArray in ein Array zu lesen.
    Local $aArray = FileReadToArray(@ScriptDir & "\___.txt"). Da ergibt sich doch schon direkt:
    $aArray[0][1] = Nummer 1
    $aArray[0][2] = Nummer 2
    $aArray[0][3] = Nummer 3


    Oder ist der Aufbau doch anders?

    Grüße autoiter

  • Leider nicht. Es ist einfach nur ein Text mit vielen Leerzeichen und Zeilenumbrüchen. Eventuell hab ich mich auch falsch ausgedrückt...
    [Blockierte Grafik: http://abload.de/img/unbenannt1lszz.png]
    Ich möchte als erstes auslesen was in Zeile 1 bei Nummer 1 steht. Dann was in Zeile 1 bei Nummer 2 steht und dann was in Zeile 1 bei Nummer 3 steht.
    Dann geh' ich in Zeile 2. und immer so weiter. Ich hoffe das kann man jetzt verstehen ^^

    • Offizieller Beitrag

    Statt eines Screenshots solltest Du lieber eine Beispieldatei posten.
    Problematisch wird aber das trennen der einzelnen Blöcke/Nummern, weil im Block 2 auch Leerzeichen vorkommen.
    Du musst also herausfinden, wie Du Block 2 und Block 3 eindeutig identifizieren kannst.
    Gibt es in Block 3 ebenfalls Leerzeichen? Ist im Block 3 immer ein Slash vorhanden? Irdendetwas eindeutiges halt.

  • Ja, eine Beispieldatei würde helfen. (Die unterschiedlich großen Abstände sehen aber schon stark nach Tabs aus). Wenn das so ist, wäre der Feldtrenner ja eindeutig.

    Grüße autoiter

  • Ja, eine Beispieldatei würde helfen. (Die unterschiedlich großen Abstände sehen aber schon stark nach Tabs aus). Wenn das so ist, wäre der Feldtrenner ja eindeutig.

    Und wenn es mehrer Leerzeichen sind dann eine Schleife mit "Ersetze zwei Leerzeichen" durch "ein Leerzeichen" solange es "zwei Leerzeichen" gibt, wenn nicht NEXT. Und dann StringSplitt. Müßte doch so gehen. Das nun um diese Uhrzeit in die Praxis umsetzen und das so wie ich hier gerade sitze? ;) Nee, lieben dann doch nicht.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Sollte nicht funktionieren, da Leerzeichen ja auch innerhalb von Spalten vorkommen (siehe 2. Spalte).
    Und dort sollte demnach nicht getrennt werden.

    Die Ausgabe hier sieht klassisch nach C-printf() aus (also StringFormat in AutoIt).
    Die Umkehrung dessen wäre dann sowas wie scanf.
    Wenn ich Zeit finde schreibe ich vielleicht mal ein entsprechendes Pendant für AutoIt (falls es nicht schon existiert).

  • So ich hatte kurz Zeit.
    Hier mal ne kleine Funktion welche die Verarbeitung solcher Stringtabellen etwas vereinfachen könnte:

    Die Funktion bekommt den zu parsenden String und eine Angabe wie eine einzelne Zeile aufgebaut ist.
    Hierbei gibt man einen Funktionsnamen an mit welcher die Spalte geparst werden soll (z.B. int wenn es eine Ganzzahl ist oder String bei Strings).
    Dabei gibt es 3 spezielle Bezeichner: leftString für linksbündige Strings (entfernt nachfolgende Leerzeichen), rightString (entfernt vorherige Leerzeichen) und void  wenn man die Spalte für die Ausgabe ignorieren möchte.
    Nach dem Funktionsnamen nur noch die Breite der Spalte (Anzahl Zeichen) und fertig.
    Am Beispiel sieht man denke ich ganz gut wie es gemeint ist.