如何读取数据中包含','的csv文件

问题描述 投票:0回答:2

我有一些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(',');
    }
c# csv
2个回答
1
投票

看来你正在使用这个库:CsvHelper

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

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

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

请参阅CsvHelper.Configuration的属性列表


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

© www.soinside.com 2019 - 2024. All rights reserved.