CSV analyseur de fichiers de Texte avec TextFieldParser - MalformedLineException

Je suis en train de travailler sur un CSV de l'analyseur à l'aide de C# TextFieldParser classe.

Mes données au format CSV, est deliminated par , et la chaîne de caractères est délimitée par une " caractère.

Cependant, parfois, la ligne de données de la cellule peut également avoir un " qui semble être de faire de l'analyseur de lever une exception.

CSV analyseur de fichiers de Texte avec TextFieldParser - MalformedLineException

C'est mon code C# pour l'instant:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Microsoft.VisualBasic.FileIO;

namespace CSV_Parser
{
    class Program
    {
        static void Main(string[] args)
        {
            //Init
            string CSV_File = "test.csv";

            //Proceed If File Is Found
            if (File.Exists(CSV_File))
            {
                //Test
                Parse_CSV(CSV_File);
            }

            //Finished
            Console.WriteLine("Press any to exit ...");
            Console.ReadKey();
        }

        static void Parse_CSV(String Filename)
        {
            using (TextFieldParser parser = new TextFieldParser(Filename))
            {
                parser.TextFieldType = FieldType.Delimited;
                parser.SetDelimiters(",");
                parser.TrimWhiteSpace = true;
                while (!parser.EndOfData)
                {
                    string[] fieldRow = parser.ReadFields();
                    foreach (string fieldRowCell in fieldRow)
                    {
                        //todo
                    }
                }
            }
        }
    }
}

C'est le contenu de mon test.csv fichier:

" dummy test"s data",   b  ,  c  
d,e,f
gh,ij

Quelle est la meilleure façon de traiter avec " dans ma cellule de la ligne de données?


Mise à JOUR

Basé sur Tim Schmelter's réponse, j'ai modifié mon code comme suit:

static void Parse_CSV(String Filename)
{
    using (TextFieldParser parser = new TextFieldParser(Filename))
    {
        parser.TextFieldType = FieldType.Delimited;
        parser.SetDelimiters(",");
        parser.HasFieldsEnclosedInQuotes = false;
        parser.TrimWhiteSpace = true;
        while (parser.PeekChars(1) != null)
        {
            var cleanFieldRowCells = parser.ReadFields().Select(
                f => f.Trim(new[] { ' ', '"' }));

            Console.WriteLine(String.Join(" | ", cleanFieldRowCells));
        }
    }
}

Qui semble produire les éléments suivants (correctement):

CSV analyseur de fichiers de Texte avec TextFieldParser - MalformedLineException

Est que c'est la meilleure façon de traiter avec chaîne de caractères délimitée par des guillemets, d'avoir un devis?

  • prétraiter le fichier pour vérifier qu'il est bien formé.
  • Avez-vous essayé avec msdn.microsoft.com/en-us/library/...
  • Qu'advient-il si vous essayez de supprimer la citation de caractère. Donc, mettre HasFieldsEnclosedInQuotes à false.
  • N'est-ce pas le drapeau indique simplement le parser la chaîne fermée à l'aide de guillemets? Je crois que c'est activé par défaut.
  • Ce n'est pas vraiment endommagé. Nous nous attendons à des données de cette façon. E. g. une cellule pourrait avoir ces données: "11" Wide" et j'ai besoin d'être en mesure d'analyser ce...
  • il est divisé selon les spec (RFC 4180): >> Si les guillemets sont utilisés pour inclure les champs, puis un guillemet double apparaissant à l'intérieur d'un champ doit être échappé en le faisant précéder d'un autre guillemet double.

InformationsquelleAutor Latheesan | 2014-03-10