我想读取一个制表符分隔的CSV文件,并使用CSVHelper解析它。
我的代码如下:
_reader = new StreamReader(_stream);
_csvReader = new CsvReader(_reader);
_csvReader.Configuration.Delimiter = "\t";
但是读取器无法正确识别和解析该文件。
有什么想法吗?
使用CSVHelper的可能分隔符是什么?
出于某种原因,事实证明只有当我按照以下方式操作时才有效:仅限此项操作:
_reader = new StreamReader(_stream);
CsvHelper.Configuration.Configuration myConfig = new
CsvHelper.Configuration.Configuration();
_csvReader.Configuration.Delimiter = "\t";
_csvReader = new CsvReader(_reader, myConfig);
var config = new CsvConfiguration(CultureInfo.CurrentCulture) { Delimiter = "~" };
using var csv = new CsvReader(reader, config);
来源:https://github.com/JoshClose/CsvHelper/blob/master/src/CsvHelper/Configuration/CsvConfiguration.cs
我在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
我遇到了一个类似的问题,是关于制表符分隔的文件,但是我无法让 Delimiter = "\t" 正常工作...
然后我在配置中添加了 Encoding = Encoding.UTF8
,然后它就正常工作了!
关于原始答案的更新。
(因为某些原因,原始答案无法编辑,所以发布为新答案)
当然,原始答案是正确的。后来,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);
CsvHelper.Configuration.CsvConfiguration()
。 - Stu_DentCsvHelper.Configuration.Configuration
的类。 - user366312