如何阅读csv文件有','在数据中

时间:2017-12-20 08:44:33

标签: c# csv

我有一些csv数据:

"data1", "data2", "data2_1", "data3"

我正在使用csvHelper来阅读数据。

当我读取数据并使用分隔符','拆分时,我得到4条记录。

"data1", 
"data2", 
"data2_1", 
"data3"

但我想要3条记录,因为我有3列

"data1", 
"data2, data2_1", 
"data3"

以下是我正在尝试的代码

var config = new CsvConfiguration() { HasHeaderRecord = false };
var stream = File.OpenRead(FilePath);
using (var csvReader = new CsvReader(new StreamReader(stream, Encoding.UTF8), config))
    {
        while (csvReader.Read()) {
        var parser = csvReader.Parser;
        var rowRecors = parser.RawRecord;
        var splitedData = rowRecors.Split(',');
    }

2 个答案:

答案 0 :(得分:1)

您似乎正在使用此库:CsvHelper

您的文件数据引用意味着每个字段都用双引号括起来,原因是某些字段可以包含字段分隔符(逗号)。在这种情况下,您应该通知您的库您用于引用字段的字符是什么,这样当它在引号对中时它可以忽略字段分隔符的存在。

此库提供您已初始化的Configuration类 您只需将其添加到构造函数

var config = new CsvConfiguration() 
                 { 
                     HasHeaderRecord = false,
                     Quote = '"'
                 };

请参阅CsvHelper.Configuration

上的属性列表

答案 1 :(得分:0)

不要手动拆分而是使用lib函数

    // By header name
var field = csv["HeaderName"];

    // Gets field by position returning string
var field = csv.GetField( 0 );



 // Gets field by position returning int
    var field = csv.GetField<int>( 0 );

// Gets field by header name returning bool
var field = csv.GetField<bool>( "IsTrue" );

// Gets field by header name returning object
var field = csv.GetField( typeof( bool ), "IsTrue" );

Refer reading samples