Frage

Ich habe eine einfache Anwendung, die eine durch Tabulatoren getrennte Textdatei öffnet, und fügt diese Daten in einer Datenbank.

Ich bin mit diesen CSV-Reader, die Daten zu lesen: http: // www .codeproject.com / KB / database / CsvReader.aspx

Und es ist alles funktioniert ganz gut!

Jetzt hat mein Kunde ein neues Feld an das Ende der Datei hinzugefügt, die „ClaimDescription“ ist, und in einige dieser Anspruch Beschreibungen, die Daten haben Zitate darin, Beispiel:

  

"SUMISEI MARU NO 2" - auf dem Meer von Japan

Dies scheint einen großen Kopfschmerzen für meine Anwendung zu verursachen. Ich erhalte eine Ausnahme, die wie folgt aussieht:

  

Die CSV erscheint in der Nähe von Rekord korrupt sein ‚1470‘ Feld '26 an Position ‚181‘. Aktuelle Rohdaten: ...

Und in diesen „Rohdaten“, sicher genug, um das Anspruch Beschreibungsfeld zeigt Daten mit Anführungszeichen in ihm.

Ich möchte wissen, ob jemand jemals zuvor dieses Problem gehabt hat, und dazu gekommen es? Natürlich kann ich den Kunden auffordern, die Daten ändern sie ursprünglich zu mir schicken, aber dies ist ein automatisiertes Verfahren, das sie verwenden, um die tabstoppgetrennte Datei zu erzeugen; und ich möchte lieber, dass als letzter Ausweg verwendet werden.

Ich dachte ich vielleicht die Datei mit einem Standard-Textreader, bevor die Hand öffnen konnte, keine Anführungszeichen entkommen, schreiben Sie den Inhalt wieder in eine neue Datei, füttert dann die Datei in die CSV-Reader. Es ist wohl erwähnenswert, dass die durchschnittliche Dateigröße dieser tabstoppgetrennten Dateien um 40 MB ist.

Jede Hilfe wird sehr geschätzt!

Cheers, Sean

War es hilfreich?

Lösung 7

Rechts - nach einer langen Nacht von Redbull und Kratzen meines Kopfes, ich fand schließlich das Problem, es Kommas in dem „Claim_Description“ Feld war. Nicht einmal darüber nachdenken, weil ich eine tabstoppgetrennte Datei verwenden, aber sobald ich einen gefunden haben, und ersetzen Sie auf alle Kommas in der Datei funktionierte es absolut in Ordnung!

Der nächste Schritt ist, um herauszufinden, wie diese Kommas zu ersetzen, bevor die Verarbeitung.

Nochmals vielen Dank für alle Vorschläge.

Cheers, Sean

Andere Tipps

Überprüfen Sie den Kommentar auf der Codeproject Artikel über Zitate:

http: //www.codeproject .com / Nachrichten / 3382857 / Re-Quotes-inside-of-the-Field.aspx

Sie müssen im Konstruktor angeben, die einen anderen Charakter wollen neben "als Anführungszeichen verwendet werden.

Mit dem FileHelpers statt Bibliothek. Es ist weit verbreitet und wird mit zitierte Felder oder Felder zu bewältigen, die Anführungszeichen enthalten.

Ich löste vor kurzem ein ähnliches Problem, und obwohl CSVReader war richtig funktioniert auf alle, aber ein paar Zeilen meiner TSV-Datei, was mein Problem am Ende gelöst wurden eine customDelimiter im Konstruktor von CsvReader

Einstellung
public static void ParseTSV(string filepath)
    {
        using (CsvReader csvReader = new CsvReader(new StreamReader(filepath), true, '\t')) {
        //if that didn't work, passing unlikely characters into the other params might help
        //using (CsvReader csvReader = new CsvReader(new StreamReader(filepath), true, '\t', '~', '`', '~', ValueTrimmingOptions.None)) {
            int fieldcount = csvReader.FieldCount;

            //Does not work, since it's read only property
            //csvReader.Delimiter = "\t";

            string[] headers = csvReader.GetFieldHeaders();

            while (csvReader.ReadNextRecord()) {
                for (int i = 0; i < fieldcount; i++) {
                    string msg = String.Format("{0}\r{1};", headers[i],
                                               csvReader[i]);
                    Console.Write(msg);
                }
                Console.WriteLine();
            }
        }
    }

Vielleicht können Sie die Datei mit Ihrer Anwendung öffnen und jedes Zitat mit einem anderen Charakter ersetzen und dann verarbeiten.

Ich habe einige der Suche, und es gibt eine RFC für CSV-Dateien ( RFC 4180 ) und dass ausdrücklich verbietet, was sie tun:

  

Jedes Feld kann oder nicht in doppelten Anführungszeichen gesetzt werden (jedoch   einige Programme wie Microsoft Excel, verwenden Sie keine doppelte Anführungszeichen   überhaupt). Wenn Felder nicht mit doppelten Anführungszeichen, dann   doppelte Anführungszeichen innerhalb der Felder möglicherweise nicht angezeigt.

Basicly, wenn sie wollen, das zu tun, sie brauchen das ganze Feld in Anführungszeichen setzen, etwa so:

,""SUMISEI MARU NO 2" - sea of Japan",

Wenn Sie also wollen Sie dieses Problem werfen auf sie zurück und darauf bestehen, sie senden Sie eine „richtige“ RFC 4180 CSV-Datei.

Da Sie Zugriff auf die Quelldateien für die CSV-Leser haben, wäre eine weitere Möglichkeit, es zu ändern, die Art von Strings in Anführungszeichen behandeln sie Sie füttern.

Diese Situation ist genau, warum es wichtig ist, Zugriff auf den Quellcode zu Ihrem Toolset haben.

Wenn Sie stattdessen werden Sie vorverarbeiten möchten (Hack) ihre Dateien, bevor sie zu Ihrem Werkzeug feeing, wäre die richtige Methode mit einem Zitat für Felder zu suchen, nicht unmittelbar vor oder hinter einem Separator und umschließen seines ganzes Feldes in einem anderen Satz von Anführungszeichen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top