Zeilenumbruch bei StringSplit

  • Hi,

    ich bin grade dabei Text aus der Zwischenablage auszulesen und dann weiter zu verarbeiten. Problem ist nun aber das wenn ich den Text via MsgBox ausgeben mehrere Absätze sind wie es auch sein soll. Wenn ich nun aber mit StringSplit und dem delimiter @CRLF versuche die einzelnen Absätze zu splitten kommt dabei nichts brauchbaren raus, da manchmal zwei oder sogar vier Absätze in einer Arrayelemnt dann gespeichert sind. Das lässt mich zu dem Schluss kommen das manche der Absätze eben kein @CRLF Absätze sind. Gibt es eine Möglichkeit mir anzeigen zu lassen welcher delimiter für diese Absätze verwendet wird?

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

    Einmal editiert, zuletzt von chip (16. Oktober 2009 um 15:48)

  • Hilft dir das weiter?

    [autoit]


    #include <Array.au3>
    $text = "Dies ist " & @CRLF & "ein Test." & @CRLF & @CRLF & @LF & "Mal sehen, was passiert" & Chr(10) & @CRLF & "So, das war's."
    MsgBox(0, "Test", $text)
    $array = StringSplit(StringStripWS($text, 7), @CRLF)

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($array)

    [/autoit]

    Gruß,
    UEZ

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Moin,
    also diese Lösung sollte die richtige sein :P

    [autoit]

    #include <Array.au3>

    [/autoit][autoit][/autoit][autoit]

    $text = "Dies ist " & @CRLF & "ein Test." & @CRLF & @CRLF & @LF & "Mal sehen, was passiert" & Chr(10) & @CRLF & "So, das war's."
    MsgBox(0, "Test", $text)

    [/autoit][autoit][/autoit][autoit]

    $array = StringSplit(StringStripWS($text, 7), @CRLF)
    ; _arraydelete($array, 0) ; Sorgt dafür, dass das Element [0] gelöscht wird - falls du es nicht brauchst
    While True
    $iIndex = _ArraySearch($array, "")
    If $iIndex <> -1 Then
    _ArrayDelete($array, $iIndex)
    Else
    ExitLoop
    EndIf
    WEnd

    [/autoit][autoit][/autoit][autoit]

    _ArrayDisplay($array)

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!

  • @ Ahnungslos bin ist 16 und passiert aber garnix wird nichtmal datei erstellt.

    @XovoxKingdom auch kein unterschied.

    Hab den Inhalt deS Zwischenspeichers mal als .txt angehängt

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Hi,
    also ich verstehe ehrlich gesagt das Problem nicht. Wenn du den Inhalt der Zwischenablage in Scite lädst und bei Ansicht die Leerzeichen und Zeilenumbrüche sichtbar machst, dann siehst du die wenigstens schon mal. Anhand dessen kannst du splitten.
    Dein Beispieltext jedenfalls funktioniert bei mir einwandfrei. Allerdings wird in deinem Text viel mit Tabulatoren gearbeitet, kann sein, dass diese Tabs von anderen Anzeigen nicht richtig ausgewertet bzw in Leerzeichen umgewandelt werden ( Msgbox? ) . Dem Stringsplit müsste das aber egal sein....
    ciao
    Andy

    • Offizieller Beitrag

    Fiese Falle:

    @CRLF sind zwei Zeichen: @CR und @LF. Das heißt, du musst bei StringSplit per letztem Parameter die Anweisung geben, nur dann zu splitten, wenn die Zeichen (hier @CRLF) gemeinsam auftreten. Default wird nach jedem Zeichen gesplittet, also zweimal an einem wirklichen Umbruch.

    Da bin ich auch schon mal drauf reingefallen ;).

    Johannes

    p.s. Thread nur halb gelesen, kann sein, dass das gar nicht dein Problem ist. Falls ja, haben alle was gelernt :D.

  • Zitat

    Das heißt, du musst bei StringSplit per letztem Parameter die Anweisung geben, nur dann zu splitten, wenn die Zeichen (hier @CRLF) gemeinsam auftreten

    Da ich das bei mir gemacht habe, gabs auch das Problem nicht 8o
    Man sollte also immer seinen funktionierenden Code posten...... :P

    [autoit]

    #include <Array.au3>
    $a=stringsplit(fileread("test.bin"),@crlf,3) ;deine angehängte Textdatei
    _arraydisplay($a)

    [/autoit]
  • Andy das man sich im Scite die Zeilenumbrüche anzeigen lassen kann wusste ich nicht. Der Code funktioniert perfekt. Vielen dank.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.