±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:
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 , odersplit/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
Beispiele für die Verwendung:
Diese kleine Tabelle CSV wird in den folgenden Beispielen verwendet:City | Name | Birth | Driver License |
---|---|---|---|
Rome | Andrea Bocelli | 1958 | y |
Los Angeles | Lieutnant Columbo | 1927 | y |
London | Hercule Poirot | 1910 | - |
New York | Theodoros Kojak | 1922 | y |
Wir werden dazu die Spalte
- 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 City First_Name Last_Name Birth Driver License Rome Andrea Bocelli 1958 y Los Angeles Lieutnant Columbo 1927 y London Hercule Poirot 1910 - New York Theodoros Kojak 1922 y - -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.
City Left Right Birth Driver License Rome Andrea Bo celli 1958 y Los Angeles Lieutnant Co lumbo 1927 y London Hercule Po irot 1910 - New York Theo doros Kojak 1922 y - -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.
City Left Right Birth Driver License Rome Andrea B ocelli 1958 y Los Angeles Lieutnant C olumbo 1927 y London Hercule P oirot 1910 - New York The odoros Kojak 1922 y - -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.)City Left Part Right Part Birth Driver License Rome Andre a Bocelli 1958 y Los Angeles Lieut nant Columbo 1927 y London Hercu le Poirot 1910 - New York Theod oros Kojak 1922 y - -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.City Left Right Birth Driver License Rome Andrea Bo celli 1958 y Los Angeles Lieutnant Co lumbo 1927 y London Hercule P oirot 1910 - New York Theodoros Kojak 1922 y
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
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.
Name | ProductID | Category Path | Price |
---|---|---|---|
Green Fashion Jacket | JACKET1 | Women : Outdoor : Jackets : Transitional | 220 $ |
Black Rain Coat | RAINCOAT1 | Women : Outdoor : Coats : Rain | 200 $ |
Rubber Flubber Rainboots | W4589356 | Women : Shoes : Boots | 100 $ |
Dragon Style Men's Blue Jeans | J4534656 | Men : Trousers : Jeans : Stonewashed : Used | 100 $ |
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:
Name | ProductID | Gender | Level2 | Level3 | Level4 | Level5 | Price |
---|---|---|---|---|---|---|---|
Green Fashion Jacket | JACKET1 | Women | Outdoor | Jackets | Transitional | 220 $ | |
Black Rain Coat | RAINCOAT1 | Women | Outdoor | Coats | Rain | 200 $ | |
Rubber Flubber Rainboots | W4589356 | Women | Shoes | Boots | 100 $ | ||
Dragon Style Men's Blue Jeans | J4534656 | Men | Trousers | Jeans | Stonewashed | Used | 100 $ |
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
Name | ProductID | Gender | Level2 | Level3 | Level4 | Level5 | Price |
---|---|---|---|---|---|---|---|
Green Fashion Jacket | JACKET1 | Women | Outdoor | Jackets | Transitional | 220 $ | |
Black Rain Coat | RAINCOAT1 | Women | Outdoor | Coats | Rain | 200 $ | |
Rubber Flubber Rainboots | W4589356 | Women | Shoes | Boots | 100 $ | ||
Dragon Style Men's Blue Jeans | J4534656 | Men | Trousers | Jeans | Stonewashed | Used | 100 $ |
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
Bei der Aufteilung nach numerischen Positionen können Sie die relativen Positionen (d.h. die Länge) als Trennzeichenparameter verwenden:
Wenn das Komma selbst als Trennzeichen angegeben werden muss und es das einzige Trennzeichen ist, schreiben Sie einfach
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:
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).
Name | To-Do |
---|---|
Call | 1. call him 2. ask for his name 3. write down the name 4. forget the name |
Write | 1. write a letter 2. wait for the answer |
Visit | 1. 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
Name | Step1 | Step2 | Step3 | Step4 | Step5 | Step6 |
---|---|---|---|---|---|---|
Call | 1. call him | ask for his name | write down the name | forget the name | ||
Write | 1. write a letter | wait for the answer | ||||
Visit | 1. Go there | ring the door bell | wait for the door being opened | say "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.
Key | Code |
---|---|
Alpha | 1KGVDEBI6KGGA6Z |
Beta | KJGTUJ75HTDH87N |
Gamma | KJHT654FNJ7FVPL |
Delta | JZVV4390JGRDGBK |
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
Key | Code1 | Code2 | Code3 |
---|---|---|---|
Alpha | 1KGVD | EBI6KG | GA6Z |
Beta | KJGTU | J75HTD | H87N |
Gamma | KJHT6 | 54FNJ7 | FVPL |
Delta | JZVV4 | 390JGR | DGBK |
Aber wenn die csv-Datei bereits mit runden Klammern vorbereitet wurde, etwa so:
Key | Code |
---|---|
Alpha | 1KGVD(EBI6KG)GA6Z |
Beta | KJGTU(J75HTD)H87N |
Gamma | KJHT6(54FNJ7)FVPL |
Delta | JZVV4(390JGR)DGBK |
So würden wir stattdessen die Spalte "Code" aufteilen und dabei die Klammern verwenden:
-split[Code]@[Code1],[Code2],[Code3]=\(,\)
Key | Code1 | Code2 | Code3 |
---|---|---|---|
Alpha | 1KGVD | EBI6KG | GA6Z |
Beta | KJGTU | J75HTD | H87N |
Gamma | KJHT6 | 54FNJ7 | FVPL |
Delta | JZVV4 | 390JGR | DGBK |
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.
Auf diese Weise behält die Spalte