CSV Parser
Syntax
$input.parseCSV()
Beschreibung
Interpretiert die Eingabe als CSV formattierten Text.
Parameter
| Name | Typ | Beschreibung | Pflicht | Default |
|---|---|---|---|---|
| input | Binärwert | Text im CSV-Format | ja | - |
| parsers | Map | Map mit Spaltenname als Schlüssel und (TLScript) Funktion als Wert. Die Wert in der jeweiligen Zellen werden gemäß der angegebenen Funktion aufbereitet. | Nein | null |
| columnSeparator | Char | Trennzeichen für Spaltenwerte | Nein | ';' |
| lineSeparator | String | Trennzeichen für die einzelne Zeilen | Nein | "\n" |
| quoteChar | Char |
Zeichen, das zum Qouten von Werten verwendet wird, die Trennzeichen oder Zeilenumbrüche enthalten. Mit \ (z.B. \") wird das Quoting-Zeichen zu einem normalen Zeichen. |
Nein | '"' |
| trimSpaces | Boolean | Ob Leerzeichen zu Beginn bzw. Ende von Werten ignoriert werden sollen. | Nein | false |
| raw | Boolean |
Ob die Funktion die Rohdaten als Liste von Listen zurück lieferen soll. Ansonsten liefert die Funktion eine Liste von Maps, wobei die Spaltennamen (aus dem Header) als Key verwendet werden. |
Nein | false/null |
Rückgabewert
Typ: Liste
Erzeugt pro Zeile in der Eingabe eine Liste/Map und fasst anschließend diese Listen in einer Liste zusammen.
Beispiele
Beispiel 1:
{
toParse = binary(
name: "test.csv",
data: "date; name; number
15.07.2024; test; 5
16.07.2024; test2; 2; etc.
17.07.2024",
contentType: "text/csv",
encoding: "utf-8"
);
result = $toParse.parseCSV();
$result
}
Ausgabe: [{date=" 15.07.2024", number=" 5", name=" test"}, {date=" 16.07.2024", number=" 2", name=" test2"}, {date=" 17.07.2024", number=, name=}]
Der Aufruf von parseCSV() liefert eine Liste von Maps. Dabei wird die erste Zeile als Header gewählt und deren Einträge als Schlüssel für die Maps verwendet. Anschließend wird für jede weitere Zeile aus deren Einträgen gemäß den Schlüsseln des Headers der zugehörigen Map erzeugt, wobei überschüssige Einträge der Zeile ignoriert und fehlenden Einträgen der Zeile mit leeren Strings aufgefüllt werden.
Beispiel 2:
{
toParse = binary(
name: "test.csv",
data: "date; name; number
15.07.2024; test; 5
16.07.2024; test2; 2; etc.
17.07.2024",
contentType: "text/csv",
encoding: "utf-8"
);
result = $toParse.parseCSV(trimSpaces:true,
parsers: {
"date": x-> dateFormat("dd.MM.yy").format(dateFormat("dd.MM.yyy").parse($x)),
"number": y -> numberFormat("#").parse($y)+1
});
$result
}
Ausgabe: [{date=15.07.24, number=6.0, name="test"}, {date=16.07.24, number=3.0, name="test2"}, {date=17.07.24, number=, name=}]
Hier wird beim Aufruf von parseCSV ein Parser für die Spalte mit dem Namen "date" und ein Parser für die Spalte mit dem Namen "number" mit angegeben, welche die Einträge aus dem entsprechenden Zellen aufbereitet.
Beispiel 3:
{
toParse = binary(
name: "test.csv",
data: "date; name; number
15.07.2024; test; 5
16.07.2024; test2; 2; etc.
17.07.2024",
contentType: "text/csv",
encoding: "utf-8"
);
result = $toParse.parseCSV(raw:true);
$result[0]
}
Ausgabe: ["date", "name", "number"]
Der Aufruf von parseCSV(raw:true) liefert die Liste [["date", " name", " number"], [" 15.07.2024", " test", " 5"], [" 16.07.2024", " test2", " 2", " etc."],[" 17.07.2024"]]. Also mit Leerzeichen vor jedem Wert außer dem ersten ("date"). Wenn diese Leerzeichen nicht gewünscht sind, muss manparseCSV(raw:true, trimSpaces:true) aufrufen.