CSV-Datei (Trennzeichen Semikolon) enthält in den Feldern auch Semikolons

  • Hallo,

    ich lese mit meinem Script eine CSV-Datei mit Texten in ein Array ein. Als Feld-Trennzeichen wird in der CSV-Datei das Semikolon verwendet. Das funktioniert auch ohne Probleme.

    Leider wird in den Feldern bzw. in den Texten auch des öfteren das Semikolon verwendet. Das kann die Funktion _FileReadToArray offenbar nicht unterscheiden. Die Texte der einzelnen Felder sind immer in Anführungszeichen "Text; weiterer Text" eingeschlossen. Hier ein Beispiel eines Datensatzes:

    "AHI_";;;;"Apnoe-Hypopnoe-Index";;;;;;;;;"";"Apnoe-Hypopnoe-Index $m1\c:FF\____$m0\c:-\/Stunde [normal: >5; Störungen: „mild“: AHI 5-15,\r„moderat“: AHI 15-30, schwer“: AHI > 30/Stunde nach der Amerikanischen Gesellschaft für Schlafmedizin (AASM)].$m0";"";"";"";"";"";"GKIRSCH";FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;"";FALSE;""

    Beim Einlesen mit _FileReadToArray wird z. B. der Teil <"Apnoe-Hypopnoe-Index $m1\c:FF\____$m0\c:-\/Stunde [normal: >5> als eigenes Feld und anschließend < Störungen: „mild“: AHI 5-15,\r„moderat“: AHI 15-30, schwer“: AHI > 30/Stunde nach der Amerikanischen Gesellschaft für Schlafmedizin (AASM)].$m0"> als das nächste Feld erkannt. Das ist natürlich nicht korrekt. Der komplette Text gehört in ein Feld und ist ja auch in Anführungszeichen eingeschlossen.

    Kann mir jemand sagen, wie ich es machen kann, dass die Semikolons innerhalb eines Textes/Feldes beim Einlesen ignoriert werden und somit als ein einzelnes Feld erkannt werden?

    Im Voraus vielen Dank
    hafoer

  • Nicht optimiert, grundsätzlich aber funktionabel... falls die Routinen im CSV-Editor den @autoBert genannt hat das nicht können... :) Brauchte sowas in der Art mal bei einem anderen Projekt... vielleicht hilft es dir ja :)

    Der Funktion wirfst du die einzelnen Zeilen der Datei hin und bekommst damit dann die einzelnen CSV-Felder in einem 1-basierten Array zurück.

    Es gibt Tage, da trete ich nicht ins Fettnäpfchen. Ich falle in die Friteuse.

    • Offizieller Beitrag

    Erst mal Willkommen. Wie es aussieht bin ich nun nicht mehr der einzige hier, der sich beruflich mit "Schläfern" befasst.

    Als Feld-Trennzeichen wird in der CSV-Datei das Semikolon verwendet. ....

    Leider wird in den Feldern bzw. in den Texten auch des öfteren das Semikolon verwendet.

    CSV-Dateien sind doch nicht auf das Semikolon als Trenner angewiesen. Ich weiß ja nicht aus welcher Quelle du die Dateien bekommst, aber vielleicht kann man ja schon bei deren Erstellung eine Änderung vornehmen, z.B. auf TAB als Trenner.

    [OT]Immer dieser Fokus auf AHI - wo bleibt der ODI? :P [/OT]

  • Vielleicht auch interessant:

    AutoIt
    #include <Array.au3>
    
    
    Global $s_String = '"AHI_";;;;"Apnoe-Hypopnoe-Index";;;;;;;;;"";"Apnoe-Hypopnoe-Index $m1\c:FF\____$m0\c:-\/Stunde [normal: >5; Störungen: „mild“: AHI 5-15,\r„moderat“: AHI 15-30, schwer“: AHI > 30/Stunde nach der Amerikanischen Gesellschaft für Schlafmedizin (AASM)].$m0";"";"";"";"";"";"GKIRSCH";FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;"";FALSE;""'
    
    
    $a_Splitted = StringSplit(StringRegExpReplace($s_String, ';(?=([^"]*"[^"]*")*[^"]*$)', @CR), @CR, 2)
    _ArrayDisplay($a_Splitted)

    setzt allerdings voraus dass alle Anführungszeichen komplett ausbalanciert sind. (Einzelne durch Dopplung auskommentierte Anführungszeichen innerhalb von Anführungszeichen würden nicht mehr klappen)