Featurewunsch: Zeilenumbrüche automatisch entfernen in CSVWriter

Wenn ich mir eine Artikelbeschreibung per Dynamischem Export aus PlentyMarkets hole, sind dort die Zeilenumbrüche innerhalb der Beschreibung entfernt. Wenn ich mir das später per SpreadsheetCSVWriter wieder zu ner CSV schreibe, hat jeder Artikel eine Spalte.


Wenn ich mir die Beschreibung aber per SOAP ziehe, kommt die mit Zeilenumbrüchen. Es ist natürlich einfach, das im Spreadsheetmapper per Text-Funktion "Zeilenumbrüche entfernen" abzufangen, keine Frage. Aber man muss halt jedes mal drandenken ;-)


Schön wäre hier eine Option im SpreadsheetCSVWriter, die falls aktiv automatisch alle Zeilenumbrüche entfernt.


Danke, Daniel

Wir diskutieren die Idee mal im Team. Klingt aber nach einem guten Vorschlag.

Das Feature wird in den nächsten Tagen ausgerollt. Es wird eine neue Option "trimMode" am SpreadsheetCSVWriter geben. Dort kann man dann die gleichen Optionen einstellen wie bei den Text-Funktionen im Mapper:


  • Trimmen und Zeilenumbrüche durch Leerzeichen ersetzen
  • Trimmen und Zeilenumbrüche entfernen
  • nur Trimmen (Zeilenumbrüche erhalten)

Die Funktion ist live.

Siehe SpreadsheetCSVWriter: trimMode


Ich hätte noch einen für CSV: Dezimaltrenner automatisch von Punkt zu Komma ändern!
Also ${Spalte?replace(".",",")} für alle Spalten...

Einmal nicht aufgepasst beim Öffnen mit LibreOffice, und alle Werte sind dahin :/
(Früher per DynExport kam alles mit Komma, jetzt per REST mit Punkt. Old habbits die hard...)

Hallo Daniel,

danke für dein Feedback. Dieser letzte Wunsch wird schwierig, da es uns eine eher individuelle Anforderung erscheint. Im CSVWriter scheint das nicht so richtig passend. Wir wollen den armen Step auch nicht mit Features überfrachten ("Featuritis"). Wir behalten das Thema Dezimaltrenner mal im Hinterkopf. Das Thema geistert uns auch stellenweise im Kopf herum und wir überlegen das irgendwie mit den Schemas (Datastore / Schema) und evtl. einer globalen Einstellung zu verheiraten.

Das mit der Featureitis kann ich nachvollziehen, allerdings find ichs im Datastore auch nicht wirklich gut aufgehoben: Im Allgemeinen ist ja der Punkt schon der Standardtrenner, im DS stört er mich nicht, alle APIs kommen auch mit Punkt...

Aber ein deutsches Office, das CSVs mit Semikolon importiert, erwartet eben ein Komma. Deshalb fand ich die Stelle wo der Spaltentrenner gewählt wird egtl auch am sinnigsten. Allerdings müsste das auch spaltenbasiert (de)aktivierbar sein, quasi wie die removeColumns-Option an selber Stelle... (Da könnte man dann aber auch diskutieren ob *der* denn sein muss, das lässt sich per Mapper ja auch simpel realisieren :P)

Naja, da ich mir die CSVs im allgemeinen mailen lasse, ist es nicht ganz so wild, weil ich immer noch eine korrekte Version in der Mail hab wenn was schiefgeht. Und für Backup-CSVs die Gefahr laufen dass sie andere Mitarbeiter auf dem NAS unbedarft öffnen, werd ich dann eben den Dezimaltrenner-Mapper beibehalten...

Hallo Daniel,

danke für dein Feedback. Ist schon nachvollziehbar so wie du es schreibst.


Folgendes Gedankenexperiment:

Was wäre wenn man einen Mapper hätte, in dem man z.B. nur 2 Spalten bearbeitet, aber alle anderen Spalten des Input-Spreadsheets bleiben unangetastet.


Beispiel:

Input-Spreadsheet 5 Spalten (id, name, description, price, shippingcosts)

Mapping (price=machePunktZuKomma, shippingCost=machePunktZuKomma und schreibe EUR hinten dran)


Output-Spreadsheet: 5 Spalten (id, name, description, price, shippingcosts)

- Es kommen wieder 5 Spalten raus, aber die beiden Spalten price und shippingcosts wurden bearbeitet.


Das wäre quasi ein Mapper oder ein neuer Modus des Mappers, den man quasi über ein bestehendes Spreadsheet drüber legen kann, um nur ausgewählte Spalten zu bearbeiten.


Vorteil:

- man die volle Power des Mappers nutzen

- man bleibt bedienungstechnisch in bekannten Gefilden



Man könnte das sich noch weiter spinnen. :)



Oh, hier hab ich eure Antwort übersehen...

Wie ihr das genau meint mit dem "neuen Mapper" ist mir noch nicht ganz klar?

> Was wäre wenn man einen Mapper hätte, in dem man z.B. nur 2 Spalten bearbeitet, aber alle anderen Spalten des Input-Spreadsheets bleiben unangetastet.

Das hab ich ja quasi jetzt schon... Ich möchte halt Aufwand sparen zum aktuellen Ablauf:

Schaut euch mal in SH_Kostenkalk den Step "DEBUG 002 SpreadsheetMapper" an: dort ersetze ich in über 40 Spalten jeweils den Dezimaltrenner, weil nach CSV exportiert werden soll, und ich den Kollegen keine "falsch" formatierten CSVs zumuten kann & will.

Bisher muss ich halt erstmal in alle Spalten die Formel "${FIELD?replace(".",",")}", und anschließend für jeden die korrekte Spaltenbezeichnung für FIELD einfügen.

Minimal Klicks sparen könnte ich evtl, wenn ich die "Suchen & Ersetzen"-Funktion direkt darunter benutzen würde. Aber a) ist es mir lieber ich sehe gleich im Wert-Feld was passiert, und b) wären das immer noch 2 Klicks und zwei Eingaben pro Spalte, das ist nur marginal weniger.

Am allerschönsten wäre natürlich, wenn ihr Felder mit Zahlen erkennen könntet (im Gegensatz zu Strings die Dezimaltrenner enthalten), und man geschlossen für alle Zahlen das Kommaformat (im CSVWriter, oder in den Einstellungen eines Spreadsheetmappers) wählen könnte. Davon geh ich aber eher nicht aus?

Am zweitliebsten wär mir die Lösung mit einem Feld (z.B.) "replacePeriod", in das ich kommagetrennt alle Spalten eingeben könnte, in denen der Dezimaltrenner ersetzt werden soll. Das hätte den Vorteil, dass ich mir den Inhalt des Felds sichern kann, und nicht jedes mal wieder meine Spalten durchgehen muss, welche relevant sind. (Als Stelle würde ich den CSVWriter wählen, weil da auch der CSV-Separator gesetzt wird. Die beiden hängen ja indirekt zusammen.)

Bei einer Mapper-Lösung is mir nicht ganz klar, inwiefern ich mir Aufwand spare, wenn ich weiter alle Spalten von Hand durchgehen muss, und dann mittels mehrerer Klicks jeweils aktivieren. Dafür gibts ja schon zwei praktikable aber aufwändige Lösungen, s.o.


Gruß Daniel

Hallo Daniel,


ok ich glaube wir reden größtenteils vom gleichen, nur mit anderen Worten ;)

Wir haben hier 2 Lösungen erarbeitet, die wir demnächst mal hier darstellen werden.


1. Lösung

Das was wir oben mit "neuem Mapper" meinten, wird vermutlich nur ein neuer Modus im bestehenden SpreadsheetMapper.

Dieser Modus erlaubt dir z.B. nur 2 Spalten zu bearbeiten, aber alle anderen einfach unangetastet durchzuschleifen.

Das hilft dir bei deinem Problem teilweise. Es würde helfen, dass neue Spalten einfach durchgeschleift werden, ohne dass du den Mapper öffnen musst. D.h. selbst wenn du 40 Spalten im Quellspreadsheet hast, aber nur 2 bearbeiten willst, brauchst du in deinem Mapper nur 2 Spalten-Definitionen (statt 40). Mit "Spalten-Definitionen" meinen wir die Spalten, die man bisher im Mapper sieht , also die Dinger, die ein Wert-Feld haben).

Aus dem Mapper kommen allerdings weiterhin 40 Spalten raus, wovon 2 bearbeitet sind. Alle anderen bleiben unangetastet.


2. Lösung

Was du dir aber noch wünschst ist eine Art "Massen-Funktionsanwendung auf viele/alle Spalten eines Spreadsheets"



die 1. Lösung wird relativ zeitnah im September kommen.

Bei der 2. Lösung sind wir noch intern am diskutieren und planen.



Kurzes Update und gute Nachrichten :)

Die beiden Lösungen werden nächste Woche verfügbar sein. Wir haben für 2. Lösung einen guten und effektiven Weg gefunden, wie wir das umsetzen können.

Details dann, sobald etwas testbares live ist.


Zusammenfassend denken wir, dass die beiden Lösungen in der Summe die von dir beschriebenen Probleme lösen.

Über deine Mitwirkung beim Test würden wir uns freuen.

Sehr gerne, sagt einfach Bescheid =)

Hallo Daniel,


so hier ist der erste Wurf:


SpreadsheetMultiColumnFunction

Das ist quasi das neues Schweizer Taschenmesser ;) Mit diesem Step kannst du eine Funktion auf mehrere Spalten anwenden. Die Funktionen funktionieren analog zu denen, die es im SpreadsheetMapper schon gibt.
Für den Spalten-Selektor kann man auch Wildcards verwenden.

  • Search and Replace (Standardwert)
  • Trim spaces and linebreaks
  • Substring
  • Scripting (Freemarker)

Neue Funktion mappingMode im SpreadsheetMapper
Diese ist hier genauer beschrieben. Diese Funktion erlaubt dir, z.B. nur 2 Spalten eines Spreadsheets zu bearbeiten. Alle anderen werden durchgeschliffen, OHNE dass du sie in der Mapping-Ansicht angeben musst (sie sind quasi nur in der Step-Vorschau (Auge-Icon) und bei der echten Ausführung zu sehen - nicht aber beim Bearbeiten des Spreadsheets.


Step SpreadsheetColumnRemover

Diesen gibt es schon länger (siehe Mai Releasenotes) und er sei hier nur der Vollständigkeit halber erwähnt, weil er die beiden obigen Steps recht gut ergänzt.
Dieser Step kann mehrere Spalten von einem Spreadsheet entfernen, ohne das man dafür einen weiteren SpreadsheetMapper nehmen muss. Dabei kann man sehr komfortabel über einen Filter-Ausdruck angeben, welche Spalten entfernt oder behalten werden sollen (z.B. mode=EXCLUDE und Filter: item_* entfernt dynamisch alle Spalten, deren Spaltenname mit item_ beginnt). Das ist z.B. sehr praktisch um Hilfsspalten auf einen Schlag zu entfernen.



Ich denke mit diesen 3 Möglichkeiten kann man recht gut effizient Flows bauen und SpreadsheetMapper einsparen.



Yeah, das sieht ja super aus :)

Funktioniert prima, v.a. die Möglichkeit die Spalten mit Wildcards auszuwählen erleichtert mir die Arbeit enorm. Jetzt muss ich nur noch meine Spalten konsistenz mit Suffixen benennen, dann schnurrt das Ding!

Kleine Anmerkung zur Auswahl der Spalten mittel dem +-Button (in SpreadsheetMultiColumnFunction): Ich kann im Popup jeweils nur eine Spalte wählen, dann geht das zu, und ich muss den Button erneut drücken. Eine Mehrfachauswahl mit Shift und unten ein Button "alle hinzufügen" wäre hier hilfreich...

Meine Größenverhältnisse sind eher "40 von 100 Spalten" als "2 von 40"...


Aber fürs erste kann ich mir die Spaltenbezeichnungen auch einfach aus dem Spreadsheetmapper rauskopieren und dann einfügen.

Der neue passthrough-mappingMode macht auf Anhieb auch direkt Spaß =) Sehr viel übersichtlicher wenn ich nur die Spalten im Mapper sehe, mit denen ich auch arbeite. Cooles Feature!


Kann was kaputt gehen wenn ich meine alten Spreadsheetmapper jetzt alle in den neuen Modus schalte, und dann selektiv Spalten entferne mit denen nichts geschieht im Step? Moduswechsel macht mir ja "im" Mapper keine Änderungen, oder?


Danke, Daniel

PS: Kann man aktivieren dass Forenbeiträge editiert werden können?

Das freut uns. Deine Anmerkungen sind notiert:


Eine Mehrfachauswahl mit Shift und unten ein Button "alle hinzufügen" wäre hier hilfreich...


Guter Punkt. Wir planen das mit ein.


Kann was kaputt gehen wenn ich meine alten Spreadsheetmapper jetzt alle in den neuen Modus schalte, und dann selektiv Spalten entferne mit denen nichts geschieht im Step? Moduswechsel macht mir ja "im" Mapper keine Änderungen, oder?


Nein, das Mapping bleibt unverändert. Der Modus hat nur einen Einfluss darauf, wie das Mapping angewendet wird. Man kann hin und her wechseln.


PS: Kann man aktivieren dass Forenbeiträge editiert werden können?


Leider nein. Wir sind auch überrascht. Vielleicht wechseln wir irgendwann mal die Forensoftware zu Discourse, aber aktuell ist da noch nichts geplant.

SpreadsheetMultiColumnFunction verliert bei mir regelmäßig searchPattern und replacement. Etwa wenn ich den Input-Step ändere, oder den Step dupliziere. Kann man da was machen?

Danke für den Hinweis mit dem Speichern. Wir konnten den Fehler nachvollziehen und ein Fix ist in Arbeit.