我正在尝试使用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个字段正确地解析为一个列表,以便对这些值进行一些更新。
提前感谢您的帮助。
答案 0 :(得分:0)
您需要按索引将列映射到您的类属性。
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);
}
}