Quoting in EDIFACT

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Quoting in EDIFACT

    Hallo allerseits,

    ich versuche hier EDIFACT-Dateien aufzusplitten, konkret die Kostenträgerdateien der Krankenkassen.
    Um das Problem etwas zu abstrahieren, will ich erstmal die Daten sauber splitten und das Quoting entfernen.

    Das Problem dabei ist das Quoting, da hier
    1. eher untypische Zeichen zum quoten verwendet werden
    2. diese optional in einem UNA-Tag abweichend vom Standard definiert werden können
    und
    3. ein explode() selbst vor einem mit \ gequoteten + nicht halt macht.

    Standardmäßig gibt es ein
    ' als Segmentendezeichen (Zeilenende)
    + Trenner zwischen Datenelementen
    : Trenner für Arrays in einem Datenelement
    ? Aufhebungszeichen

    im Text gequoted wird (standardmäßig):
    Code:
    ' -> ?'
    + -> ?+
    : -> ?:
    ? -> ??
    Das ' bereitet mir noch keine Sorgen, da gleichzeitig noch ein Zeilenende dahinter kommt und demzufolge mit rtrim() entfernbar ist. Das gequotete ?' in den Daten stört hier nicht.

    PHP-Code:
    $line "UNB+bla?+bla+a \\+ b = c+noch?'was+32:0:1'";
    $line=rtrim($line"'");
    $fields explode("+"$line); 
    Das Originalquoting nach EDIFACT "?+" (in bla+bla) kann ja nicht erkannt werden, aber auch ein Quoting mit "\+" (in a + b = c) ist für explode() nicht als solches erkennbar. Getrennt wird hier bei jedem "+".

    Daher die Frage, wie löse ich das Problem?
    Ich vermute mal RegEx ist der richtige Weg, aber da fehlt mir etwas der Ansatz.
    Momentan tendiere ich dazu, das ?+ durch z.B. ##PLUS## zu ersetzen, das sollte im normalen Text nicht vorkommen und hinterher zurück zu + (gleich ohne Quoting).
    Problematisch wird es nur, wenn das UNA-Tag anders definiert wird und # verwendet wird.

    Das 2. Splitting innerhalb des Datenelements mit dem ":" ist weniger kritisch, da diese Daten normalerweise keine weiteren Doppelpunkte im Inhalt haben. Konsequenterweise wäre das aber hier auch so wie oben zu handhaben, da ebenfalls explode() verwendet wird.

    Gibt es hier einen generischen Ansatz?

    Kann mir jemand einen Denkanstoß geben?
    Danke im Voraus.

    Gruß
    Rico
Lädt...
X