Zwischen komma

  • Hey,
    habe folgende bsp. txt datei

    a,b,c,d,e,f,g,h
    1,2,3,4,5,6,7,8
    a,s,d,f,g,h,j,k
    a,b,c,d,e,f,g,h
    1,2,3,4,5,6,7,8
    a,s,d,f,g,h,j,k
    a,b,c,d,e,f,g,h
    1,2,3,4,5,6,7,8
    a,s,d,f,g,h,j,k
    a,b,c,d,e,f,g,h


    ich möchte gerne alles was zwischen dem ersten komma und dem Zweiten löschen.
    und alles zwischen dem 4. und 6. komma

    Wie mache ich das am besten?

    Danke SubZero

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Spoiler anzeigen
    [autoit]

    $sText = _
    "a,b,c,d,e,f,g,h" & @CRLF & _
    "1,2,3,4,5,6,7,8" & @CRLF & _
    "a,s,d,f,g,h,j,k" & @CRLF & _
    "a,b,c,d,e,f,g,h" & @CRLF & _
    "1,2,3,4,5,6,7,8" & @CRLF & _
    "a,s,d,f,g,h,j,k" & @CRLF & _
    "a,b,c,d,e,f,g,h" & @CRLF & _
    "1,2,3,4,5,6,7,8" & @CRLF & _
    "a,s,d,f,g,h,j,k" & @CRLF & _
    "a,b,c,d,e,f,g,h" & @CRLF

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

    $sText1 = StringRegExpReplace($sText, "([^,]+,)([^,]+)(,(?>[^,]+,){2})([^,]+,[^,]+)(.+)", "\1\3\5")
    MsgBox(0, "", "Mit Kommas: " & @CRLF & @CRLF & $sText1)

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

    $sText2 = StringRegExpReplace($sText, "([^,]+)(,[^,]+)(,(?>[^,]+,){2})([^,]+,[^,]+,)(.+)", "\1\3\5")
    MsgBox(0, "", "Ohne Kommas: " & @CRLF & @CRLF & $sText2)

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • an welcher stelle von

    [autoit]

    StringRegExpReplace

    [/autoit]


    bestimmst du ab welchen komma es gelöscht werden soll?
    ich verstehe das nicht?

    Und wie würde man das machen wenn man ein text file direkt bearbeiten würde?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Danke echt nett:

    aber ich versuche es zu verstehen..
    an welcher stelle der syntax bestiimt man wo was entfernt wird?
    ich verstehe die syntax nicht?

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Mann ist das komliziert respekt ;)

    Gibt es keinen einfachen weg den ich auch verstehen könnte?
    vielleicht kein

    [autoit]

    StringRegExpReplace

    [/autoit]

    ??

    lg SubZero ;)
    ==========================================================================

    "Der Computer ist die logische Weiterentwicklung des Menschen: Intelligenz ohne Moral."

  • Eine andere Möglichkeit wäre StringSplit:

    [autoit]


    $String = "a,b,c,d,e,f,g,h"&@cr&"1,2,3,4,5,6,7,8"&@cr&"a,s,d,f,g,h,j,k"&@cr&"a,b,c,d,e,f,g,h"&@cr&"1,2,3,4,5,6,7,8"&@cr&"a,s,d,f,g,h,j,k"&@cr&"a,b,c,d,e,f,g,h"&@cr&"1,2,3,4,5,6,7,8"&@cr&"a,s,d,f,g,h,j,k"&@cr&"a,b,c,d,e,f,g,h"
    $String = StringSplit($String,",") ; Teilt einen String
    $Ergebniss = ""
    For $i = 1 to $String[0] ; Setzt String zusammen
    If $i <> 2 and $i <> 5 and $i <> 6 Then $Ergebniss &= $String[$i]&","
    next
    $Ergebniss = StringTrimRight($Ergebniss,1); Schneidet ein übeschüssiges Komma weg
    msgbox(0,"",$Ergebniss); zeigt erbebniss an

    [/autoit]
    • Offizieller Beitrag

    Hier mal zur Erklärung:

    Ich mache es zweistufig:

    zwischen 1. und 2. Komma entfernen
    '(\w,)' Buchstabe/Zahl und Komma ==> in Klammern bilden erste Backreferenz ($1)
    '(\w,)' Buchstabe/Zahl und Komma ==> in Klammern bilden zweite Backreferenz ($2)
    '(.+)' beliebiges Zeichen ein/mehrfach ==> in Klammern bildet dritte Backreferenz ($3)
    Das alles wird ersetzt durch die Backreferenzen $1 und $3

    Das jetzige Ergebnis wird wiederum in Backreferenzen erfasst
    '((\w,){3})' Backreferenz $1 enthält Backreferenz $2 3-mal
    '(\w,){2}' Backreferenz $3 (2-mal) ist das zu enfernende Element
    '(.+)' Backreferenz $4
    Backreferenzen $1 und $4 enthalten das gewünschte Ergebnis.

  • Oh von jeder Zeile.
    Sorry das habe ich falsch verstanden.

    [autoit]


    $String = "a,b,c,d,e,f,g,h"&@cr&"1,2,3,4,5,6,7,8"&@cr&"a,s,d,f,g,h,j,k"&@cr&"a,b,c,d,e,f,g,h"&@cr&"1,2,3,4,5,6,7,8"&@cr&"a,s,d,f,g,h,j,k"&@cr&"a,b,c,d,e,f,g,h"&@cr&"1,2,3,4,5,6,7,8"&@cr&"a,s,d,f,g,h,j,k"&@cr&"a,b,c,d,e,f,g,h"; Teilt einen String
    $Ergebniss = ""
    $String = StringSplit($String,@cr)
    For $i = 1 to $String[0] ; For next Schleife die alle Zeilen nacheinander durchgeht
    $Zeile = StringSplit($String[$i],",")
    For $i2 = 1 to $Zeile[0]; For next Schleife die alle Inhalte zwischen den Kommas nacheinander durchgeht
    If $i2 <> 2 and $i2 <> 5 and $i2 <> 6 Then $Ergebniss &= $Zeile[$i2]&","; Inhalt wird wieder zusammen gesetzt außer bei dem Inhalt zwischen 1. & 2. Komma und zwischen 4. bis 6.
    next
    $Ergebniss = StringTrimRight($Ergebniss,1); Schneidet ein übeschüssiges Komma weg
    $Ergebniss &= @cr; Fügt den Zeilenumbruch wieder dran
    next
    msgbox(0,"",$Ergebniss); zeigt ergebniss an

    [/autoit]

    Einmal editiert, zuletzt von Zeitriss (28. April 2010 um 23:58)