gibt es eine schnelle Möglichkeit (Win oder Linux), eine umfangreiche Tabelle mit etwa 30 Spalten jede Spalte auf ein maximum an Zeichen zu begrenzen? Beispiel: Input: abcdefghijeklm:abcdefghije:abcdefghijekl:abcdefgh:abcdefghijeklmn Vorgabe maximale Zeichen: Spalte 1=6 2=4 3=4 4=4 5=6 Output: abcdef:abcd:abcd:abcd:abcdef
Chris schrieb: > gibt es eine schnelle Möglichkeit Schnell in der Erstellung oder schnell in der Ausführung? Chris schrieb: > eine umfangreiche Tabelle Was bedeutet das? Dateiformat? Datenbank? Chris schrieb: > jede Spalte auf ein maximum an Zeichen zu begrenzen Allgemein: nimm eine Scriptsprache. Ob Python, Powershell oder Bash sollte egal sein. Substring, Trim, Take, Split oder ähnliche Befehle führen zum Ziel. Ansonsten bekommt man das bestimmt auch mit Regex hin 😄
N. M. schrieb: > Ansonsten bekommt man das bestimmt auch mit Regex hin
1 | sed -E -e 's/^(.{0,6}).*?:(.{0,4}).*?:(.{0,4}).*?:(.{0,4}).*?:(.{0,6}).*?$/\1:\2:\3:\4:\5/' |
aber mit mehr als 9 Spalten geht das nicht, gibt nur \1 bis \9
So kann man es in einer Batchdatei machen. Die Eingangsdatei heißt im Beispiel "von.txt", die Ergebnisdatei "nach.txt". Dieses Beispiel verarbeitet die ersten 5 Spalten. Groß- und Kleinschreibung der Variablen a, A, B, C,... ist zu beachten!:
1 | SETLOCAL ENABLEDELAYEDEXPANSION |
2 | copy nul nach.txt |
3 | for /f %%a in (von.txt) do ( |
4 | for /f "tokens=1-5 delims=:" %%A in ("%%a") do ( |
5 | set tmp=%%A&set tmp=!tmp:~,6!&set result=!tmp! |
6 | set tmp=%%B&set tmp=!tmp:~,4!&set result=!result!:!tmp! |
7 | set tmp=%%C&set tmp=!tmp:~,4!&set result=!result!:!tmp! |
8 | set tmp=%%D&set tmp=!tmp:~,4!&set result=!result!:!tmp! |
9 | set tmp=%%E&set tmp=!tmp:~,6!&set result=!result!:!tmp! |
10 | )
|
11 | echo !result!>>nach.txt |
12 | )
|
13 | ENDLOCAL
|
Bei Erweiterung auf 30 Spalten sind nach 'Z' die im Code folgenden Zeichen zu verwenden:
1 | set tmp=%%Z&set tmp=!tmp:~,6!&set result=!result!:!tmp! |
2 | set tmp=%%[&set tmp=!tmp:~,6!&set result=!result!:!tmp! |
3 | set tmp=%%\&set tmp=!tmp:~,6!&set result=!result!:!tmp! |
4 | set tmp=%%]&set tmp=!tmp:~,6!&set result=!result!:!tmp! |
5 | set tmp=%%^^&set tmp=!tmp:~,6!&set result=!result!:!tmp! |
Enthält eine Spalte weniger Zeichen als die Begrenzung erlaubt, bleibt der Wert unverändert. Gruß WIRO
Es lässt sich noch etwas vereinfachen:
1 | SETLOCAL ENABLEDELAYEDEXPANSION |
2 | copy nul nach.txt |
3 | for /f %%a in (von.txt) do ( |
4 | for /f "tokens=1-30 delims=:" %%A in ("%%a") do ( |
5 | set tmp=%%A&set result=!tmp:~,6! |
6 | set tmp=%%B&set result=!result!:!tmp:~,4! |
7 | set tmp=%%C&set result=!result!:!tmp:~,4! |
8 | set tmp=%%D&set result=!result!:!tmp:~,4! |
9 | set tmp=%%E&set result=!result!:!tmp:~,6! |
10 | )
|
11 | echo !result!>>nach.txt |
12 | )
|
13 | ENDLOCAL
|
Gruß WIRO
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.