CSVHelper无法解析我的制表符分隔的CSV文件。

6

我想读取一个制表符分隔的CSV文件,并使用CSVHelper解析它。

我的代码如下:

 _reader = new StreamReader(_stream);
 _csvReader = new CsvReader(_reader);
 _csvReader.Configuration.Delimiter = "\t";

但是读取器无法正确识别和解析该文件。

有什么想法吗?
使用CSVHelper的可能分隔符是什么?

5个回答

14

出于某种原因,事实证明只有当我按照以下方式操作时才有效:仅限此项操作

 _reader = new StreamReader(_stream);

 CsvHelper.Configuration.Configuration myConfig = new 
     CsvHelper.Configuration.Configuration();

 _csvReader.Configuration.Delimiter = "\t";

 _csvReader = new CsvReader(_reader, myConfig);

我只找到了CsvConfiguration而没有像这样的Configuration() CsvHelper.Configuration.CsvConfiguration() - Stu_Dent
1
这个答案是不正确的。没有叫做CsvHelper.Configuration.Configuration的类。 - user366312

1

0

我在VB中解析一个制表符分隔的文件时遇到了类似的问题,直到我将"\t"替换为vbTab才成功。

我的代码:

Imports System.Globalization
Imports System.IO
Imports CsvHelper
Imports CsvHelper.Configuration
Imports CsvHelper.Configuration.Attributes

Public Class TabDelimetedReader
    Public Shared Function ReadFile(path As String) As IEnumerable(Of TabFileDefinition)

        Dim config = New CsvConfiguration(CultureInfo.InvariantCulture,
            hasHeaderRecord:=False,
            delimiter:=vbTab)

        Using reader As StreamReader = New StreamReader(path)
            Using tsv = New CsvReader(reader, config)
                Return tsv.GetRecords(Of TabFileDefinition).ToList
            End Using
        End Using

    End Function
End Class

0

我遇到了一个类似的问题,是关于制表符分隔的文件,但是我无法让 Delimiter = "\t" 正常工作...

然后我在配置中添加了 Encoding = Encoding.UTF8,然后它就正常工作了!


1
你好,能否提供确切的代码呢?这样能让你的回答更棒。 - Rishabh Kumar

0

关于原始答案的更新。

(因为某些原因,原始答案无法编辑,所以发布为新答案)

当然,原始答案是正确的。后来,CsvHelper API 稍有改变。这里是适用于当前 CsvHelper 版本(30.0.1)的代码:


var _reader = new StreamReader(_stream);

CsvHelper.Configuration.CsvConfiguration myConfig = new
    CsvHelper.Configuration.CsvConfiguration(CultureInfo.InvariantCulture)
    {
        Delimiter = "\t"
    };

var _csvReader = new CsvReader(_reader, myConfig);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接