我正在使用CsvHelper来将数据读/写到Csv文件中。现在,我想解析csv文件的定界符。我怎么能得到这个?
我的代码:
var parser = new CsvParser(txtReader);
delimiter = parser.Configuration.Delimiter;
Run Code Online (Sandbox Code Playgroud)
我总是得到分隔符为“,”,但实际上在csv文件中,分隔符为“ \ t”。
由于我不得不处理这样一种可能性,根据用户的本地化设置,CSV 文件(保存在 MS Excel 中)可能包含不同的分隔符,因此我最终采用了以下方法:
public static string DetectDelimiter(StreamReader reader)
{
// assume one of following delimiters
var possibleDelimiters = new List<string> {",",";","\t","|"};
var headerLine = reader.ReadLine();
// reset the reader to initial position for outside reuse
// Eg. Csv helper won't find header line, because it has been read in the Reader
reader.BaseStream.Position = 0;
reader.DiscardBufferedData();
foreach (var possibleDelimiter in possibleDelimiters)
{
if (headerLine.Contains(possibleDelimiter))
{
return possibleDelimiter;
}
}
return possibleDelimiters[0];
}
Run Code Online (Sandbox Code Playgroud)
我还需要重置读取器的读取位置,因为它与我在 CsvReader 构造函数中使用的实例相同。
当时的用法如下:
using (var textReader = new StreamReader(memoryStream))
{
var delimiter = DetectDelimiter(textReader);
using (var csv = new CsvReader(textReader))
{
csv.Configuration.Delimiter = delimiter;
... rest of the csv reader process
}
}
Run Code Online (Sandbox Code Playgroud)
CSV 是Comma分离值。我认为您无法可靠地检测是否有使用分隔符的不同字符。如果有标题行,那么您也许可以依靠它。
您应该知道所使用的分隔符。打开文件时您应该能够看到它。如果文件的来源每次都为您提供不同的分隔符并且不可靠,那么我很抱歉。;)
如果您只想使用不同的分隔符进行解析,那么您可以设置csv.Configuration.Delimiter. http://joshclose.github.io/CsvHelper/#configuration-delimiter
| 归档时间: |
|
| 查看次数: |
3701 次 |
| 最近记录: |