Neues Thema starten
Beantwortet

Per Script neue Spalten erzeugen

Hallo Synesty-Team,


Ich habe folgende Ausgangsspalten:


image


Die Anzahl der durch Pipe getrennten Einträge ist links und rechts jeweils gleich, differiert aber von Zeile zu Zeile. Ich möchte daraus nun ein Spreadsheet machen, das so viele Spalten hat, wie die Zeile mit den meisten Pipe-Trennern plus 1, wobei der erste Eintrag in der neuen Spalte 1, der zweite in 2 usw. stehen soll; falls es keinen Eintrag gibt, soll die Spalte an der Stelle leer sein. Im Ergebnis für diese Werte wäre das dann so (gekürzt):


image


Ich könnte natürlich das Ganze mit aufwendigen substrings lösen, wobei da aber ein großes Problem bestünde: ich weiß vorher nicht, wieviele Pipes maximal vorkommen und kann deshalb das gewünschte Spreadsheet nicht im Voraus von den benötigten Spalten her festlegen (für alle Werte des ersten Bildes wäre Tabelle 2 nämlich z.B. falsch, weil in Zeile 14 ein Eintrag mehr existiert - daher wäre die zweite Tabelle dann 10 Spalten breit, nicht 8).


Gibt es hier eine Möglichkeit?


Danke und Gruß, Micha


 


Beste Antwort

Hallo Micha, 


eine richtig einfache Lösung haben wir nicht, aber folgendermaßen würde es gehen: 


1. Step SpreadsheetMapper: Maximale Anzahl Pipes herausfinden (Hilfspalte AnzahlPipes und Sortieren Absteigen)

image

 

2. Step: SpreadsheetMapper: Pipes auffüllen (original Spreadsheet als Input)

image


 Skript für linke Spalte, rechte Spalte analog

${linkeSpalte}<#assign fehlendePipes = meta.spreadsheet@SpreadsheetMapper_2.firstRow("AnzahlPipes")!?number - linkeSpalte?split("|")?size><#if (fehlendePipes > 0)><#list 1..fehlendePipes as p>|</#list></#if>

 

3. Step SpreadsheetCSVWriter

delimiter = PIPE (|)

textqualifier = [none]

printHeader = no


4. Step SpreadsheetCSVReader 

delimiter = PIPE (|)

hasHeader = No


Ergebnis:

image

VG Torsten





Antwort

Hallo Micha, 


eine richtig einfache Lösung haben wir nicht, aber folgendermaßen würde es gehen: 


1. Step SpreadsheetMapper: Maximale Anzahl Pipes herausfinden (Hilfspalte AnzahlPipes und Sortieren Absteigen)

image

 

2. Step: SpreadsheetMapper: Pipes auffüllen (original Spreadsheet als Input)

image


 Skript für linke Spalte, rechte Spalte analog

${linkeSpalte}<#assign fehlendePipes = meta.spreadsheet@SpreadsheetMapper_2.firstRow("AnzahlPipes")!?number - linkeSpalte?split("|")?size><#if (fehlendePipes > 0)><#list 1..fehlendePipes as p>|</#list></#if>

 

3. Step SpreadsheetCSVWriter

delimiter = PIPE (|)

textqualifier = [none]

printHeader = no


4. Step SpreadsheetCSVReader 

delimiter = PIPE (|)

hasHeader = No


Ergebnis:

image

VG Torsten




Das ist ziemlich gut - hatte auch schon mit dem csv writer experimentiert, aber ohne Deinen Pipe-Step wurde das natürlich nichts. Gibt es eigentlich noch eine Möglichkeit, Spaltennamen per Script zu ändern? Vielleicht über TextHTMLWriter?


Danke!


Gruß Micha

Der Text TextHtmlWriter würde auf alle Fälle gehen. 


Alternativ könntest du auch noch einen SpreadsheetCSVWriter und anschließend den FileFindAndReplace Step dahinter hängen. Im FileFindAndReplace kannst du dann das "col" (regularExpression) z.B. durch "Spalte_" (replacement) ersetzen. Das Ergebnis würde dann z.B. so aussehen:

image


Viele Grüße

Torsten


Anmelden um einen Kommentar zu veröffentlichen