mixmastertobsi: PHP CSV Trennzeichen Problem

Hallo,

ich habe einen Dienstleister, von welchem ich in meinem System eine CSV importieren muss und ich habe ein Problem mit den Trennzeichen, weil das Komma auch in den Zahlen ist.

2018-04-18, 3458766676860664256, 100113181, 119,00

Ich probiert nach ", " zu trennen, aber das geht leider auch nicht, sondern er trennt immer nach dem Komma...auch ohne Leerzeichen. Wer hat eine Idee?

  1. Tach!

    ich habe einen Dienstleister, von welchem ich in meinem System eine CSV importieren muss und ich habe ein Problem mit den Trennzeichen, weil das Komma auch in den Zahlen ist.

    2018-04-18, 3458766676860664256, 100113181, 119,00

    Ich probiert nach ", " zu trennen, aber das geht leider auch nicht, sondern er trennt immer nach dem Komma...auch ohne Leerzeichen. Wer hat eine Idee?

    Das Format sollte an der Quelle repariert werden. Wenn das Trennzeichen in den Werten auftaucht, muss der Wert quotiert werden, ansonsten ist das ein Syntaxfehler.

    Wenn du nicht in der Position bist, dem Dienstleister den Fehler auszutreiben, dann kannst du nur anhand von Indizien entscheiden, was du machst. Beispielsweise, wenn die Werte immer mit Komma plus Leerzeichen getrennt sind, dann nimm das als Feldtrenner. Wenn der Dienstleister das aber später ändert, oder das Leerzeichen nicht zuverlässig da ist, dann gehts so nicht. Wenn du Glück hast, findest du eine andere Regelmäßigkeit.

    Wenn das Komma im Feld nur bei diesem einen Zahlenwert auftreten kann, dann kannst du anhand der Feldanzahl erkennen, ob du eine Zeile mit Kommazahl oder ohne vorliegen hast und kannst die Felder entsprechend verknüpfen.

    dedlfix.

    1. Hallo dedlfix,

      Wenn du nicht in der Position bist, dem Dienstleister den Fehler auszutreiben

      Bug ist Bug, da fehlen ja nun eindeutig die Anführungszeichen. Ein Trenn-"Wort" sieht CSV meines Wissens nicht vor, also ist eine Unterscheidung zwischen /,[^\d]/ und /,\d/ ein Hack, auf den man sich nicht einlassen sollte. Auf ", " oder /,\s/ sollte man keinesfalls prüfen; wer weiß, wann der Lieferant den Bug fixt. Ein Space nach dem Komma ist als Inhaltsteil des nächsten Feldes zu betrachten, und nicht als Teil des Trennzeichens.

      Andererseits ist CSV das zweitmieseste Interchange-Format von allen (nur noch gebottomed von native binary) und hat vermutlich mehr Varianten als BASIC, da gehört kreativer Schaffensdrang schon fast zum guten Ton. Hier steht ein Versuch, ein kleinsten gemeinsamen Nenner der diversen Implementierungen zu formalisieren.

      Rolf

      --
      sumpsi - posui - clusi
  2. Hallo mixmastertobsi,

    in PHP: delimiter Bestimmt das Feldtrennzeichen (nur ein Zeichen).

    Grüße, Martl

  3. Hallo,

    Wer hat eine Idee?

    Sieh es als Feature und importiere die Dezimalzahlen als Vorkommateil und Nachkommateil...

    Gruß
    Kalk