Tabelle "beschneiden"

Gast #6954360
Lesenswert?

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
#6954364
Lesenswert?

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 😄
Gast #6955086
Lesenswert?

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
Gast #6955538
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren