CSVfox
Get the job done.
 Deutsch

±split

Teilt eine Spalte CSV in zwei oder mehr Spalten auf

Dieser Befehl teilt eine Spalte in zwei oder mehr Spalten auf, indem er sie an der gleichen Stelle durch die neuen Spalten ersetzt.

Das Grundprinzip ist einfach:

±split[Aktuelle Spalte]@[Neue Spalte],[Neue Spalte],...=Trennzeichen
Die neuen Spaltennamen können als kommagetrennte Liste und/oder als Spaltennamenbereich angegeben werden (siehe unten).
Die Trennzeichen hinter dem Gleichheitszeichen = bestimmen, an welchen Stellen die Spalte aufgeteilt wird.

Wenn keine Spaltennamen für die Ausgabe verwendet werden (d.h. -colnames wurde auf "false" gesetzt), kann stattdessen die Anzahl der neuen Spalten in runden Klammern angegeben werden. Sie haben dann "leere" Spaltennamen.

Splitting-Modi

Es gibt vier Aufteilungsmodi, und jeder funktioniert von links oder von rechts. Der Aufteilungsmodus wird durch den Befehlsmodus definiert.

Spalten von links nach rechts trennen:

Der Spalteninhalt wird von Anfang bis Ende nach der Trennzeichenfolge durchsucht.
  • split oder split/s. Die Aufteilung erfolgt beim ersten Vorkommen der Trennzeichenfolge (siehe unten). Der linke Teil wird in die erste Spalte eingefügt, der Rest wird nach rechts verschoben. Die Trennzeichenkette selbst geht dabei verloren.
  • split/l (links geteilt). Dito, aber die Trennzeichenkette wird an die linke Spalte angehängt.
  • split/r (rechts geteilt). Die Trennzeichenfolge wird der rechten Spalte vorangestellt.
  • split/n=n (an Position trennen). Teilt nach dem n-ten Zeichen der Spalte auf (d.h., die linke Spalte hat die Breite n).

Die Spalten werden von rechts nach links getrennt:

Der Spalteninhalt wird rückwärts nach der Trennzeichenfolge vom Ende zum Anfang durchsucht.
  • split/-s Die Aufteilung erfolgt beim letzten Vorkommen der Trennzeichenkette. Der letzte Abschnitt wird in die Spalte ganz rechts eingefügt. Der Rest verbleibt auf der linken Seite. Die Trennzeichenkette selbst geht dabei verloren.
  • split/-l (links aufteilen). Dito, aber die Trennzeichenkette wird an die linke Spalte angehängt.
  • split/-r (rechts aufteilen). Die Trennzeichenfolge wird der rechten Spalte vorangestellt.
  • split/-n=n (an Position trennen). Teilt vor dem n-ten rechten Zeichen der Spalte auf (d.h., die rechte Spaltenbreite ist n).

Das Trennzeichen

Die Trennzeichenfolge wird durch den Befehlsparameter nach dem "=" definiert. Der Inhalt hinter (oder vor) dem Trennzeichen wird in die neue Spalte übertragen. Wenn kein Trennzeichen angegeben wird, wird das " " (Leerzeichen) angenommen.
Wenn das Trennzeichen im Spalteninhalt nicht gefunden wird, erhält die erste neue Spalte den gesamten Inhalt und die anderen neuen Spalten bleiben leer.
Wenn der Modus numerisch ist (/n oder /-n), muss hinter dem "=" eine Zahl (oder eine Reihe von Zahlen, siehe unten) stehen. Diese Zahl ist keine Trennzeichenfolge, sondern gibt die Position an, an der geteilt werden soll.

Eine Spalte in zwei Spalten aufteilen

Dies ist sehr einfach. Nennen Sie einfach die vorhandene Spalte, die beiden neuen Spalten und das gewünschte Trennzeichen oder die Position, an der die Spalte geteilt werden soll, und die angegebene Spalte wird durch die beiden neuen ersetzt.
Wenn Sie keine Spaltennamen verwenden, können Sie anstelle der Namen nur die Anzahl der neuen Spalten (in runden Klammern) angeben.

Muster

±split[CurrentColumn]@[NewColumn],[NewColumn] ±split[AktuelleSpalte]@[NeueSpalte],[NeueSpalte]=Trennzeichenstring ±split/mode[AktuelleSpalte]@[NeueSpalte],[NeueSpalte]=Trennzeichenstring ±split[CurrentColumnNumber]@(2)=Trennzeichen string

Beispiele für die Verwendung:

Diese kleine Tabelle CSV wird in den folgenden Beispielen verwendet:
fullnames.csv
CityNameBirthDriver License
RomeAndrea Bocelli1958y
Los AngelesLieutnant Columbo1927y
LondonHercule Poirot1910-
New YorkTheodoros Kojak1922y
Die folgenden Beispiele zeigen, wie Sie eine Spalte in verschiedenen Modi aufteilen können.
Wir werden dazu die Spalte Name verwenden.
csvfox fullnames.csv -split[Name]@[First_Name],[Last_Name] firstlastnames.csv
Die Trennung erfolgt am ersten Leerzeichen (da dies das Standardtrennzeichen für die Aufteilung ist). Dieses Leerzeichen geht verloren.
Die resultierende Tabelle CSV wird in firstlastnames.csv geschrieben.
firstlastnames.csv
CityFirst_NameLast_NameBirthDriver License
RomeAndreaBocelli1958y
Los AngelesLieutnantColumbo1927y
LondonHerculePoirot1910-
New YorkTheodorosKojak1922y
-split/l[Name]@[Left],[Right]=o
Das Feld Name wird beim ersten Auftreten des Zeichens "o" in zwei neue Spalten aufgeteilt. Das "o" wird an die linke Spalte angehängt.
CityLeftRightBirthDriver License
RomeAndrea Bocelli1958y
Los AngelesLieutnant Columbo1927y
LondonHercule Poirot1910-
New YorkTheodoros Kojak1922y
-split/r[Name]@[Left],[Right]=o
Auch das Feld Name wird beim ersten Auftreten des Zeichens "o" in zwei neue Spalten aufgeteilt. Das "o" wird der rechten Spalte vorangestellt.
CityLeftRightBirthDriver License
RomeAndrea Bocelli1958y
Los AngelesLieutnant Columbo1927y
LondonHercule Poirot1910-
New YorkTheodoros Kojak1922y
-split/n[Name]@[Left\sPart],[Right\sPart]=5
Das Feld Name wird nach dem fünften Zeichen getrennt (d.h. die erste Spalte ist 5 Zeichen breit). Die neuen Spaltennamen lauten "Left Part" und "Right Part".
Tipp: Für das "\s" als Platzhalter für Leerzeichen siehe hier: Zeichen-Escaping und Platzhalter.
Der Platzhalter kann für die Verwendung in der Befehlszeile erforderlich sein, aber nicht innerhalb einer %job, %j Datei. Sie können dort ein einfaches Leerzeichen verwenden.
CityLeft PartRight PartBirthDriver License
RomeAndrea Bocelli1958y
Los AngelesLieutnant Columbo1927y
LondonHercule Poirot1910-
New YorkTheodoros Kojak1922y
-split/-n[Name]@[Left],[Right]=5
Ein negatives "n" bedeutet, dass die Position vom rechten Ende aus gezählt wird: Die rechte Spalte wird aus den letzten fünf Zeichen der Spalte Name bestehen, die linke Spalte erhält den (linken) Rest.
CityLeftRightBirthDriver License
RomeAndrea Bocelli1958y
Los AngelesLieutnant Columbo1927y
LondonHercule Poirot1910-
New YorkTheodoros Kojak1922y

Aufteilung einer Spalte in mehr als zwei neue Spalten

Beschreibung

Dies funktioniert genau wie zuvor. Sie geben einfach noch mehr neue Spaltennamen an!
Da hier jedoch mehr Aufteilungen stattfinden, gibt es die Möglichkeit, jedes Aufteilungsereignis anders zu behandeln (siehe unten).

Muster

±split[AktuelleSpalte]@[NeueSpalte],[NeueSpalte]-[NeueSpalte]... ±split[AktuelleSpalte]@[NeueSpalte],[NeueSpalte]-[NeueSpalte]=Trennzeichen ±split/mode[AktuelleSpalte]@[NeueSpalte],[NeueSpalte]-[NeueSpalte]=Trennzeichen,Trennzeichen,Trennzeichen ...

Beispiele für die Verwendung:

Hier ist eine Produkttabelle "products.csv", die einen unschönen Kategoriepfad enthält, der für die weitere Verarbeitung in einzelne Kategoriespalten aufgeteilt werden muss.

Products.csv
NameProductIDCategory PathPrice
Green Fashion JacketJACKET1Women : Outdoor : Jackets : Transitional220 $
Black Rain CoatRAINCOAT1Women : Outdoor : Coats : Rain200 $
Rubber Flubber RainbootsW4589356Women : Shoes : Boots100 $
Dragon Style Men's Blue JeansJ4534656Men : Trousers : Jeans : Stonewashed : Used100 $

Die Trennzeichenfolge ist offensichtlich " : " (Leerzeichen, Doppelpunkt, Leerzeichen).
Also los geht's! CSVfox muss automatisch fünf neue Kategorieebenen für uns generieren.
Die erste soll "Gender" heißen, dann müssen vier Unterebenen mit den Namen "Level2" bis "Level5" folgen.
Tipp: Wenn Sie den Bindestrich "-" anstelle einer kommagetrennten Liste der gewünschten Spaltennamen verwenden, kann der Befehl ±split automatisch einfache Zahlen- oder Buchstabenfolgen generieren. Wir verwenden diese Funktion für die "Level" Nummerierung.

-split[Category\sPath]@[Gender],[Level2]-[Level5]=\s:\s

Dies ist das Ergebnis:
ProductsWithCategories.csv
NameProductIDGenderLevel2Level3Level4Level5Price
Green Fashion JacketJACKET1WomenOutdoorJacketsTransitional220 $
Black Rain CoatRAINCOAT1WomenOutdoorCoatsRain200 $
Rubber Flubber RainbootsW4589356WomenShoesBoots100 $
Dragon Style Men's Blue JeansJ4534656MenTrousersJeansStonewashedUsed100 $

Jedes "\s" steht für ein einzelnes Whitespace als Teil des Trennzeichens.
Sie können die Leerzeichen in der Trennzeichenfolge weglassen und stattdessen nur den Doppelpunkt als Trennzeichen definieren, aber dann sollte der Inhalt aller neuen Spalten anschließend mit ±trim gekürzt werden. Außerdem könnte ein einzelner eingebetteter Doppelpunkt als Kategorietrennzeichen missverstanden werden.

Und das passiert, wenn der Modus "-s" (von rechts nach links) verwendet wird:
-split/-s[Category\sPath]@[Gender],[Level2]-[Level5]=\s:\s

ProductsWithCategories.csv
NameProductIDGenderLevel2Level3Level4Level5Price
Green Fashion JacketJACKET1WomenOutdoorJacketsTransitional220 $
Black Rain CoatRAINCOAT1WomenOutdoorCoatsRain200 $
Rubber Flubber RainbootsW4589356WomenShoesBoots100 $
Dragon Style Men's Blue JeansJ4534656MenTrousersJeansStonewashedUsed100 $

Dies kann nützlich sein, wenn die Hierarchie von rechts nach links geordnet ist und nicht von links nach rechts wie im obigen Beispiel.
Wenn der Inhalt von "Gender" dennoch immer in die erste neue Spalte eingefügt werden soll, ist ein zweistufiger Ansatz erforderlich:
-split/s[Category\sPath]@[Gender],[Levels]=\s:\s
-split/-s[Levels]@[Level2]-[Level5]=\s:\s

ProductsWithCategories.csv
NameProductIDGenderLevel2Level3Level4Level5Price
Green Fashion JacketJACKET1WomenOutdoorJacketsTransitional220 $
Black Rain CoatRAINCOAT1WomenOutdoorCoatsRain200 $
Rubber Flubber RainbootsW4589356WomenShoesBoots100 $
Dragon Style Men's Blue JeansJ4534656MenTrousersJeansStonewashedUsed100 $

Mehr Trennzeichen für mehr Felder verwenden

Sie können optional eine Reihe von Trennzeichenketten definieren, eine für jede neue Spalte. In diesem Fall muss die Anzahl der Trennzeichen genau der Anzahl der neuen Spalten minus 1 entsprechen, da jedes Trennzeichen zum Trennen eines neuen Feldes verwendet wird. Diese Trennzeichen müssen durch ein Komma verkettet werden ,, wie
-split[This]@[New1],[New2],[New3],[New4]=1.,2.,3. oder
-split[This]@[New1],[New2],[New3],[New4]=-,-,\s.
Bei der Aufteilung nach numerischen Positionen können Sie die relativen Positionen (d.h. die Länge) als Trennzeichenparameter verwenden:
-split/n[This]@[New1],[New2],[New3],[New4]=-5,10,5.

Wenn das Komma selbst als Trennzeichen angegeben werden muss und es das einzige Trennzeichen ist, schreiben Sie einfach -split(...)=,.
Wenn das Komma jedoch stattdessen Teil einer Trennzeichenfolge oder in der Trennzeichenliste enthalten ist, muss es aus Gründen der Übersichtlichkeit mit einem Escapezeichen versehen werden:
-split(...)=-,\,,-  Hier haben wir eine Liste mit drei Trennzeichen (Bindestrich, escapetes Komma, Bindestrich), um vier neue Spalten voneinander zu trennen.


Stellen Sie sich eine To-Do-Liste vor, deren Schritte getrennt werden sollen. Allerdings wird es nie mehr als sechs Schritte geben (aufgrund der Größe dieses Beispiels).
to-do-list.csv
NameTo-Do
Call1. call him 2. ask for his name 3. write down the name 4. forget the name
Write1. write a letter 2. wait for the answer
Visit1. Go there 2. ring the door bell 3. wait for the door being opened4. say "Good morning!" 5. enter 6. drink coffee

Jetzt werden wir die Schritte aufteilen. Wir suchen nach den Trennzeichen, die bei jedem Schritt anders sind. Wir wollen sie nicht behalten, aber wir müssen sie trotzdem als Trennzeichen auflisten.

-split/s[To-Do]@[Step1]-[Step6]=2.\s,3.\s,4.\s,5.\s,6.\s
to-do-list-steps.csv
NameStep1Step2Step3Step4Step5Step6
Call1. call him ask for his name write down the name forget the name
Write1. write a letter wait for the answer
Visit1. Go there ring the door bell wait for the door being openedsay "Good morning!" enter drink coffee

Sie sehen, dass wir das erste Trennzeichen auf diese Weise nicht losgeworden sind. Ein weiterer Befehl ist erforderlich, um das "1. " vom Anfang der Spalte "Step1" zu entfernen.

Zum Schluss noch ein Beispiel, wie Sie die numerische Aufteilung in mehr als zwei Spalten verwenden können.
Wir haben einige Schlüssel mit alphanumerischen Codes, die 15 Ziffern lang sind, und möchten sie in Spalten mit fünf, sechs und vier Ziffern aufteilen.
codes.csv
KeyCode
Alpha1KGVDEBI6KGGA6Z
BetaKJGTUJ75HTDH87N
GammaKJHT654FNJ7FVPL
DeltaJZVV4390JGRDGBK

So können wir die Spalte "Code" aufteilen
(der verbleibende Teil nach der Aufteilung an Stelle 5 und dann an Stelle 6 wird in die dritte Spalte "Code3" übernommen):
-split/n[Code]@[Code1],[Code2],[Code3]=5,6

threepartcodes.csv
KeyCode1Code2Code3
Alpha1KGVDEBI6KGGA6Z
BetaKJGTUJ75HTDH87N
GammaKJHT654FNJ7FVPL
DeltaJZVV4390JGRDGBK

Aber wenn die csv-Datei bereits mit runden Klammern vorbereitet wurde, etwa so:

codes.csv
KeyCode
Alpha1KGVD(EBI6KG)GA6Z
BetaKJGTU(J75HTD)H87N
GammaKJHT6(54FNJ7)FVPL
DeltaJZVV4(390JGR)DGBK

So würden wir stattdessen die Spalte "Code" aufteilen und dabei die Klammern verwenden:
-split[Code]@[Code1],[Code2],[Code3]=\(,\)
threepartcodes.csv
KeyCode1Code2Code3
Alpha1KGVDEBI6KGGA6Z
BetaKJGTUJ75HTDH87N
GammaKJHT654FNJ7FVPL
DeltaJZVV4390JGRDGBK

Vergessen Sie nur nicht, alle Klammern und "Sonder"-Zeichen zu entwerten (siehe Platzhalter).

Beibehaltung der ursprünglichen Spalte

Wenn Sie die ursprüngliche Spalte zusammen mit den neuen Spalten beibehalten möchten, sollten Sie sie vor der Aufteilung duplizieren.
-insert[ColumnToSplit]@[OriginalColumn]=[OriginalColumn]
-split[ColumnToSplit]@[NewColumn1],[newColumn2]...
Auf diese Weise behält die Spalte [OriginalColumn] ihren gesamten Inhalt, während [ColumnToSplit] durch die neuen Spalten ersetzt wird.

Under construction, coming soon