[英]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文件如下所示:
問題#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""";
Hack:您可以使用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。 修復導入應該只是絕對的最后手段hack。
查看FileHelpers 網站上的快速入門示例,他們的示例csv僅包含數據 - 而不是描述性的第一行數據。
我想當FileHelperEngine讀取第一行的第一項(即“ID”)時,它會嘗試將其轉換為整數,但失敗...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.