CSV-Export via sw-sync-cli

Moin,

via sw-sync-cli und einem entsprechenden YAML-Skript versuche ich Produkte als CSV-Datei zu exportieren. Das funktioniert soweit super!

Wo ich mich jedoch im Kreise drehe ist der Umstand, dass ich gerne die Ausgabe/Formatierung des Brutto-Preis mit dem Dezimaltrennzeichen Komma statt Punkt hätte.

Ich verwende das folgende serialize_script aus dem Beispiel reduziert auf Brutto-Preis:

serialize_script: |
  if entity.price == () {
    row.default_price_gross = "";
  } else {
    let default_currency = get_default("CURRENCY");
    let price = entity.price.find(|p| p.currencyId == default_currency);
    row.default_price_gross = price.gross;
  }

Kann mir hier jemand auf die Sprünge helfen?

Moin,

müsste mit

row.default_price_gross = price.gross.replace(".", ",");

klappen :slight_smile:

Moin @NilsKR

danke Dir für Deine Antwort :+1:.

Das hatte ich bereits probiert und führte jwdoch zu einem Fehler.

`Result::unwrap()` on an `Err` value: Function not found: replace (f64, &str | ImmutableString | String, &str | ImmutableString | String)

Dann habe ich das probiert:

row.default_price_gross = price.gross.to_string().replace(".", ",");

Ergebnis: kein Fehler damit jedoch führt das zu „null“-Ergebnissen in der Spalte.

Das Problem ist, dass das Tabellenfeld mit JSON-Daten (Object) befüllt ist.
Und da dreh’ ich mich im Kreise und bin aktuell am Ende meines Lateins. Hab viel gelesen, mit KI versucht aber ohne Erfolg bis dato.

Freue ich über weitere Hilfe bzw. Ideen :folded_hands:

Ich antworte mir hier nun mal selber, da ich (endlich…) erfolgreich war :innocent:.

Vielleicht ist es ja für jemanden ja mal hilfreich (hier nur der entsprechende Ausschnitt meines Skripts):

serialize_script: |
  if entity.price == () {
    row.default_price_gross = "";
  } else {
    let default_currency = get_default("CURRENCY");
    let price = entity.price.find(|p| p.currencyId == default_currency);
    
    if price == () {
      row.default_price_gross = "";
    } else {
      // Zahl zu String
      let gross_str = price.gross.to_string();

      // Prüfen ob ein "." im String ist
      if gross_str.contains(".") {
        // Aufteilen bei "."
        let parts = gross_str.split(".");

        // Teile mit Komma zusammensetzen
        row.default_price_gross = parts[0] + "," + parts[1];
      } else {
        // Kein Dezimalpunkt, Ausgabe direkt
        row.default_price_gross = gross_str;
      }
    }
  }
1 Like