CSVfox
Leverage Your Data.
 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]...
Die neuen Spaltennamen können als kommagetrennte Liste und/oder als Spaltennamenbereich angegeben werden (siehe unten).
Wenn die Spaltennamen nicht für die Ausgabe verwendet werden (d.h. wenn -colnames auf "false" gesetzt wurde), kann stattdessen die Anzahl der neuen Spalten in runden Klammern angegeben werden. Sie haben dann "leere" Spaltennamen.

Modi für die Aufteilung

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 Auftreten der Trennzeichenfolge (siehe unten). Der erste Abschnitt wird in die nächste Spalte 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 trennen). Die Trennzeichenfolge wird der rechten Spalte vorangestellt.
  • split/n=n (an Position trennen). Wird nach dem n-ten Zeichen der Spalte getrennt.

Trennen von Spalten von rechts nach links:

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 nächste Spalte verschoben. Die Trennzeichenkette selbst geht dabei verloren.
  • split/-l (links aufteilen). Dito, aber die Trennzeichenkette wird an die linke Spalte angehängt.
  • split/-r (rechts trennen). Die Trennzeichenfolge wird der rechten Spalte vorangestellt.
  • split/-n=n (split at position). Wird vor dem vorletzten Zeichen der Spalte getrennt.

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.
Das Trennzeichen kann ein Ausdruck sein, der aufgelöst wird. Beispiel: der Inhalt einer anderen Spalte.

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[AktuelleSpalte]@[NeueSpalte],[NeueSpalte] ±split[AktuelleSpalte]@[NeueSpalte],[NeueSpalte]=Trennzeichen ±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 Whitespace. Dieses Whitespace 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
Die neuen Spalten werden beim ersten Auftreten des Zeichens "o" getrennt. 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
Die neuen Spalten werden durch das erste Auftreten des Zeichens "o" getrennt. 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
Die neuen Spalten werden nach dem fünften Zeichen getrennt.
(Für das "\s" als Leerzeichen siehe hier: Zeichen-Escaping und Platzhalter.
Es ist nur für die Befehlszeile erforderlich, nicht innerhalb einer %params Datei. Dort können Sie 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 bezeichnen einfach noch mehr neue Spalten!
Da hier jedoch mehr Aufteilungen stattfinden, haben Sie 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.
Wenn Sie den Bindestrich "-" verwenden, kann der Befehl ±split automatisch einfache Zahlen- oder Buchstabenfolgen erzeugen.

-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 $

Das "\s" steht für ein Leerzeichen; Sie können Leerzeichen in der Trennzeichenfolge weglassen, aber dann sollte der Inhalt aller neuen Spalten anschließend mit ±trim gekürzt werden. Außerdem könnte ein willkürlich 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 $

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 in jedem Schritt anders sein werden. Wir wollen sie nicht behalten, aber wir müssen sie trotzdem als Trennzeichen auflisten.

-split/-s[To-Do]@[Step1]-[Step6]=1.\s,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" übertragen):
-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[ColumnCopy]@[OriginalColumn]=[OriginalColumn]
-split[ColumnCopy]@[NewColumn1],[newColumn2]...
Auf diese Weise behält die Spalte [OriginalColumn] ihren gesamten Inhalt, während [ColumnCopy] in die neuen Spalten aufgeteilt wird.

Under construction, coming soon