537 Stimmen

Umgang mit Kommas in einer CSV-Datei

Ich bin auf der Suche nach Vorschlägen, wie eine CSV-Datei zu behandeln ist, die von unseren Kunden erstellt und dann hochgeladen wird und die möglicherweise ein Komma in einem Wert enthält, z. B. einen Firmennamen.

Einige der Ideen, die wir in Betracht ziehen, sind: Bezeichner in Anführungszeichen (Wert "," Werte ", "usw.) oder die Verwendung eines | anstelle eines Kommas. Das größte Problem ist, dass wir es einfach machen müssen, sonst wird der Kunde es nicht tun.

5voto

Rufus Pollock Punkte 2235

Sie können alternative "Trennzeichen" wie ";" oder "|" verwenden, aber am einfachsten ist es, wenn Sie einfach in Anführungszeichen setzen, was von den meisten (anständigen) CSV-Bibliotheken und den meisten anständigen Tabellenkalkulationen unterstützt wird.

Para mehr über CSV-Begrenzungszeichen und eine Spezifikation für ein Standardformat zur Beschreibung von Begrenzungszeichen und Anführungszeichen finden Sie auf dieser Webseite

5voto

Hier ist eine nette kleine Abhilfe:

Sie können eine Griechisches Kleinbuchstabenzeichen stattdessen (U+0375)

Es sieht folgendermaßen aus

Mit dieser Methode sparen Sie auch eine Menge Ressourcen...

4voto

Nadar Punkte 480

Ich weiß, dass es fast 13 Jahre später ist, aber wir sind auf eine ähnliche Situation gestoßen, in der der Kunde uns eine CSV-Datei mit Werten mit Kommas eingibt, und es gibt 2 Anwendungsfälle:

  1. Wenn der Client einen Windows-Excel-Client verwendet, um die CSV-Datei zu schreiben (was in der Regel in einer Windows-Umgebung der Fall ist), werden Kommas automatisch zum Wert hinzugefügt. enter image description here

Der tatsächliche Textwert der CSV-Datei:

3786962,1st Meridian Care Services,John,"Person A,Person B, Person C, Person D",Voyager
  1. Wenn der Kunde Ihnen die Excel-Datei programmatisch sendet, sollte er sich an die RFC4180 und schließen Sie den Wert mit "Zitate" . Beispiel:

Spalte 1, Spalte 2, "a, b, c" , Spalte4

4voto

Neil Punkte 3681

Wenn Sie Lust haben, das Rad neu zu erfinden, können Sie die folgenden Möglichkeiten nutzen:

public static IEnumerable<string> SplitCSV(string line)
{
    var s = new StringBuilder();
    bool escaped = false, inQuotes = false;
    foreach (char c in line)
    {
        if (c == ',' && !inQuotes)
        {
            yield return s.ToString();
            s.Clear();
        }
        else if (c == '\\' && !escaped)
        {
            escaped = true;
        }
        else if (c == '"' && !escaped)
        {
            inQuotes = !inQuotes;
        }
        else
        {
            escaped = false;
            s.Append(c);
        }
    }
    yield return s.ToString();
}

4voto

Phil Punkte 6335

Wenn Sie an einer lehrreichen Übung zum Parsen von Dateien im Allgemeinen (am Beispiel von CSV) interessiert sind, können Sie sich dieser Artikel von Julian Bucknall. Mir gefällt der Artikel, weil er die Dinge in viel kleinere Probleme aufteilt, die viel weniger unüberwindbar sind. Zuerst erstellt man eine Grammatik, und sobald man eine gute Grammatik hat, ist es ein relativ einfacher und methodischer Prozess, die Grammatik in Code umzuwandeln.

Der Artikel verwendet C# und enthält am Ende einen Link zum Herunterladen des Codes.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X