FileHelpers - 将“”“"ID"””转换为类型时出错:'Int32'
FileHelpers - Error Converting '"""ID""' to type: 'Int32'
csv文件中的IntValue1是一个没有双引号的数字,但是当系统读取该行时,它会在开头添加双引号,并在行尾添加双引号和分号来分隔行。因此,IntValue1 以双引号开头,系统无法将其识别为 int... 请帮助我修复此错误。
型号:
[DelimitedRecord(",")]
public class MyObject
{
private int _ID;
public int ID
{
get { return _ID; }
set { _ID = value; }
}
private DateTime _EventDate;
public DateTime EventDate
{
get { return _EventDate; }
set { _EventDate = value; }
}
private string _IPAddress;
public string IPAddress
{
get { return _IPAddress; }
set { _IPAddress = value; }
}
}
数据读取&显示代码:
private static void GetCsvData()
{
var engine = new FileHelperEngine<MyTypeObj>();
//The error occurs at this line:
var result = engine.ReadFile("C:\CsvFileName.csv");
//Code to display the Data
}
CSV 文件如下所示:
错误发生时调试器返回的行内容:
错误:
查看 FileHelpers website 上的快速入门示例,他们的示例 csv 仅包含数据 - 不是描述性的第一行数据。
我猜当 FileHelperEngine 读取第一行的第一项时,即 "ID",它会尝试将其转换为整数,但失败了...
问题 #1:您的文件不是有效的 CSV。解决此问题的正确方法是更正文件的导出方式,因为它未导出有效的 CSV 文件。
这不是有效的 CSV 文件:
"ID,""EventDate"",""IPAddress""";
"1,""2013-01-19"",""11.81.11.00""";
"2,""2012-11-25"",""11.72.41.84""";
"3,""2011-12-27"",""15.80.";"3.36"""
"4,""2014-08-17"",""17.72.";"9.24"""
"5,""2012-01-30"",""90.94.27.108""";
"6,""2013-02-15"",""19.97.27.189""";
技巧:您可以使用 FileHelpers 通过 BeforeReadRecord
事件导入无效的 CSV 文件。有时您无法控制您可能会收到用于导入的 CSV 文件。
您的模特:
[IgnoreFirst]
[DelimitedRecord(",")]
public class MyTypeObj
{
[FieldConverter(ConverterKind.Int32)]
public int ID;
[FieldQuoted]
[FieldConverter(ConverterKind.Date, "yyyy-mm-dd")]
public DateTime EventDate;
[FieldQuoted]
public string IPAddress;
}
您的代码:
var engine = new FileHelperEngine<MyTypeObj>();
engine.BeforeReadRecord += (@base, args) =>
{
// Convert this: "1,""2013-01-19"",""11.81.11.00""";
// to this: 1,"2013-01-19","11.81.11.00"
args.RecordLine = args.RecordLine
.Substring(1, args.RecordLine.Length - 3)
.Replace("\"\"", "\"");
};
var result = engine.ReadFile(@"C:\CsvFileName.csv");
这些行你仍然会有问题(为什么值中间有一个分号???):
"3,""2011-12-27"",""15.80.";"3.36"""
"4,""2014-08-17"",""17.72.";"9.24"""
您也可以在 BeforeReadRecord
中修复这些问题,但最好弄清楚导出出了什么问题。
tl;dr 修复文件的导出方式,以便您获得有效的 CSV。修复导入应该只是最后的手段。
csv文件中的IntValue1是一个没有双引号的数字,但是当系统读取该行时,它会在开头添加双引号,并在行尾添加双引号和分号来分隔行。因此,IntValue1 以双引号开头,系统无法将其识别为 int... 请帮助我修复此错误。
型号:
[DelimitedRecord(",")]
public class MyObject
{
private int _ID;
public int ID
{
get { return _ID; }
set { _ID = value; }
}
private DateTime _EventDate;
public DateTime EventDate
{
get { return _EventDate; }
set { _EventDate = value; }
}
private string _IPAddress;
public string IPAddress
{
get { return _IPAddress; }
set { _IPAddress = value; }
}
}
数据读取&显示代码:
private static void GetCsvData()
{
var engine = new FileHelperEngine<MyTypeObj>();
//The error occurs at this line:
var result = engine.ReadFile("C:\CsvFileName.csv");
//Code to display the Data
}
CSV 文件如下所示:
错误发生时调试器返回的行内容:
错误:
查看 FileHelpers website 上的快速入门示例,他们的示例 csv 仅包含数据 - 不是描述性的第一行数据。
我猜当 FileHelperEngine 读取第一行的第一项时,即 "ID",它会尝试将其转换为整数,但失败了...
问题 #1:您的文件不是有效的 CSV。解决此问题的正确方法是更正文件的导出方式,因为它未导出有效的 CSV 文件。
这不是有效的 CSV 文件:
"ID,""EventDate"",""IPAddress""";
"1,""2013-01-19"",""11.81.11.00""";
"2,""2012-11-25"",""11.72.41.84""";
"3,""2011-12-27"",""15.80.";"3.36"""
"4,""2014-08-17"",""17.72.";"9.24"""
"5,""2012-01-30"",""90.94.27.108""";
"6,""2013-02-15"",""19.97.27.189""";
技巧:您可以使用 FileHelpers 通过 BeforeReadRecord
事件导入无效的 CSV 文件。有时您无法控制您可能会收到用于导入的 CSV 文件。
您的模特:
[IgnoreFirst]
[DelimitedRecord(",")]
public class MyTypeObj
{
[FieldConverter(ConverterKind.Int32)]
public int ID;
[FieldQuoted]
[FieldConverter(ConverterKind.Date, "yyyy-mm-dd")]
public DateTime EventDate;
[FieldQuoted]
public string IPAddress;
}
您的代码:
var engine = new FileHelperEngine<MyTypeObj>();
engine.BeforeReadRecord += (@base, args) =>
{
// Convert this: "1,""2013-01-19"",""11.81.11.00""";
// to this: 1,"2013-01-19","11.81.11.00"
args.RecordLine = args.RecordLine
.Substring(1, args.RecordLine.Length - 3)
.Replace("\"\"", "\"");
};
var result = engine.ReadFile(@"C:\CsvFileName.csv");
这些行你仍然会有问题(为什么值中间有一个分号???):
"3,""2011-12-27"",""15.80.";"3.36"""
"4,""2014-08-17"",""17.72.";"9.24"""
您也可以在 BeforeReadRecord
中修复这些问题,但最好弄清楚导出出了什么问题。
tl;dr 修复文件的导出方式,以便您获得有效的 CSV。修复导入应该只是最后的手段。