csv - Gewisse Zeichen entfernen

  • Hallo liebe Fachleute. Ich würde gerne eine CSV Datei einlesen. Diese CSV Datei hat in jeder Zeile 36 Semikola. In jeder Zeile müssten die Semikolons 26-30 gelöscht werden. Anschließend soll die CSV wieder ausgegeben werden. Kann mir jemand da auf die Schnelle Helfen? Das wäre der Hammer :)

  • Bring mal ein Beispiel - danach richtet sich erst wie man da rangehen würde.

    Denn es ist noch nicht klar ob die Semikolons weiterhin als Spaltentrenner eine Funktion haben (also Leerspalten) oder innerhalb von Werten z.b. in Zeichenketten stecken.

    • Offizieller Beitrag

    Wenn die Semikola wirklich nur als Spaltentrenner dienen:

  • Ähnlicher Ansatz wie bei Oscar wemm die Semikolons nicht noch in anderer Form auftauchen können:

    AutoIt
    $sCSV = ClipGet()
    
    Local $sRet, $dMitte
    For $sLine in StringSplit($sCSV, @CRLF, 3)
        $dMitte = StringInStr($sLine, ';', 1, 25)
        $sRet &= StringLeft($sLine, $dMitte) & _
                StringReplace(StringTrimLeft($sLine, $dMitte), ';', '', 5, 1) & @CRLF
    Next
    
    ConsoleWrite($sRet)

    Edit:

    Eins klar vornweg: Ich halte Regex für diesen Fall für ziemlich ungeeignet.

    Einfach da es mir (vielleicht findet jemand anderes eine elegante Lösung) nicht gelingt hierfür ein kurzes und elegantes Pattern zu basteln.
    Aber um dennoch die hier obligatorische Regex-Lösung zu liefern habe ich noch folgendes gebastelt:

    AutoIt
    $sCSV = ClipGet()
    
    $sCSVNeu = StringRegExpReplace($sCSV, '(?m)^(?:[^;]*[;]){25}[^;]*\K(?>([^;]*)(?>;))(?>([^;]*)(?>;))(?>([^;]*)(?>;))(?>([^;]*)(?>;))(?>([^;]*)(?>;))', '\1\2\3\4\5')
    
    ConsoleWrite($sCSVNeu & @CRLF)

    Einmal editiert, zuletzt von AspirinJunkie (25. Juni 2020 um 11:08)