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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.