csvhelper - 使用 CsvHelper 读取管道分隔文件时出现问题
问题描述
我正在尝试使用 CsvHelper 读取没有标题的管道分隔文件。我设置了分隔符 =“|”,设置 HasHeaderRecord = false,设置 MissingFieldFound = null 和 IgnoreBlankLines = true。我注意到我的文件在文件末尾包含一个空行。我的文件包含 3 列。我创建了一个对象,将这些值与所有 3 的字符串属性一起放入。当我运行我的代码时,第一个变量包含所有 3 列,其他 2 个变量为空白。以下是我正在阅读的文件示例:
01001001|0.0|0.1200|
01001003|0.0|0.5000|
01008000|1.0|1.9200|
101384|9999.0|0.1000|
103073|9999.0|0.0730|
103074|9999.0|0.1600|
103491|9999.0|0.1460|
我在摘要中提供了这些信息。如果我没有设置 MissingFieldFound,我将无法读取该文件。我收到以下错误:
“索引 '1' 处的字段不存在。您可以通过将 MissingFieldFound 设置为 null 来忽略缺失的字段。”
using (var textReader = new StreamReader(@processFileName))
{
var reader = new CsvReader(textReader);
reader.Configuration.Delimiter = "|";
using (var record = new CsvReader(textReader))
{
record.Configuration.HasHeaderRecord = false;
record.Configuration.MissingFieldFound = null;
record.Configuration.IgnoreBlankLines = true;
var result3 = record.GetRecords<ItemFileInfo>().ToList();
}
}
public class ItemFileInfo
{
public string ItemCode { get; set; }
public string OnHand { get; set; }
public string Weight { get; set; }
}
我希望能够将 3 个字段正确解析为列表,以便对这些值进行一些更新。
提前感谢您的任何帮助。
解决方案
您需要按索引将列映射到您的类属性。
using (StreamReader reader = new StreamReader(@processFileName))
using (CsvReader csv = new CsvReader(reader))
{
csv.Configuration.HasHeaderRecord = false;
csv.Configuration.Delimiter = "|";
csv.Configuration.RegisterClassMap<ItemFileInfoClassMap>();
var results = csv.GetRecords<ItemFileInfo>().ToList();
}
public class ItemFileInfo
{
public string ItemCode { get; set; }
public string OnHand { get; set; }
public string Weight { get; set; }
}
public class ItemFileInfoClassMap : ClassMap<ItemFileInfo>
{
public ItemFileInfoClassMap()
{
Map(m => m.ItemCode).Index(0);
Map(m => m.OnHand).Index(1);
Map(m => m.Weight).Index(2);
}
}
推荐阅读
- r - 无法将 ggplot 保存为 eps
- azure - Azure 应用服务“本地写入字节”
- truetype - truetype字体ARGS_ARE_XY_VALUES是什么意思?
- cuda - 是否有可能获得指向 cuDoubleComplex 的实部和虚部的指针?
- reactjs - React.js 和 Redux - 如何创建“流行”页面
- events - D3JS:事件触发不起作用
- jquery - 为什么 jquery 不在服务器端 node.js 中运行?
- gitlab - Gitlab CI 同时在多个平台上
- php - 从数组中删除索引,它是用 array_push() 创建的
- shell - 如何不在 shell 中执行 .js 文件