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
csv - Gewisse Zeichen entfernen
-
noscripter -
25. Juni 2020 um 10:09 -
Erledigt
-
-
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:
AutoIt
Alles anzeigenGlobal $sCSVfile = @ScriptDir & '\test.csv' Global $aDataCSV = StringSplit(FileRead($sCSVfile), @CRLF, 3), $sTmp For $i = 0 To UBound($aDataCSV) - 1 $sTmp = StringReplace($aDataCSV[$i], ';', '*', 25) ; die ersten 25 Semikola in * umwandeln $sTmp = StringReplace($sTmp, ';', '*', -6) ; ebenso die letzten 6 $sTmp = StringReplace($sTmp, ';', '') ; die uebrigen Semikola loeschen $sTmp = StringReplace($sTmp, '*', ';') ; jetzt die * wieder in Semikola wandeln $aDataCSV[$i] = $sTmp Next Global $hFile = FileOpen(@ScriptDir & '\test_new.csv', 2) If $hFile <> -1 Then For $sData In $aDataCSV FileWriteLine($hFile, $sData) Next FileClose($hFile) EndIf
-
Ä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: -
Schon mal vielen Dank 👍