我有这个 csv 文件,我需要能够读取它,但我无法让它工作。这是csv和 acsv 的图片。我不确定问题是什么,我一直在关注教程,所以我猜测这可能与 csv 文件及其使用的间距有关。我无法更改 csv 中的任何内容。我尝试向类添加名称属性以及索引属性。
CsvHelper版本:27.1.0
public static void Main(string[] args)
{
using (var streamReader = new StreamReader(@"C:\Users\Adam\Desktop\C#\price_detail.csv"))
{
using (var csvReader = new CsvReader(streamReader, CultureInfo.InvariantCulture))
{
var records = csvReader.GetRecords<SKU>();
}
}
}
public class SKU
{
//[Name("PriceValueId")]
public string PriceValueId { get; set; }
//[Name("Created")]
public DateTime Created { get; set; }
//[Name("Modified")]
public DateTime Modified { get; set; }
//[Name("CatalogEntryCode")]
public string CatalogEntryCode { get; set; }
//[Name("MarketId")]
public string MarketId { get; set; }
//[Name("CurrencyCode")]
public string CurrencyCode { get; set; }
//[Name("ValidFrom")]
public DateTime ValidFrom { get; set; }
//[Name("ValidUntil")]
public DateTime ValidUntil { get; set; }
//[Name("UnitPrice")]
public decimal UnitPrice { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
调试输出:
Header with name 'PriceValueId'[0] was not found.
Header with name 'Created'[0] was not found.
Header with name 'Modified'[0] was not found.
Header with name 'CatalogEntryCode'[0] was not found.
Header with name 'MarketId'[0] was not found.
Header with name 'CurrencyCode'[0] was not found.
Header with name 'ValidFrom'[0] was not found.
Header with name 'ValidUntil'[0] was not found.
Header with name 'UnitPrice'[0] was not found.
If you are expecting some headers to be missing and want to ignore this validation, set the configuration HeaderValidated to null. You can also change the functionality to do something else, like logging the issue.
IReader state:
ColumnCount: 0
CurrentIndex: -1
HeaderRecord:
["PriceValueId Created Modified CatalogEntryCode MarketId CurrencyCode ValidFrom ValidUntil UnitPrice"]
IParser state:
ByteCount: 0
CharCount: 101
Row: 1
RawRow: 1
Count: 1
RawRecord:
PriceValueId Created Modified CatalogEntryCode MarketId CurrencyCode ValidFrom ValidUntil UnitPrice
Run Code Online (Sandbox Code Playgroud)
CsvReader 接受comma默认分隔符,因此如果您的文件具有不同的分隔符(例如 )semicolon,则需要像这样定义 CsvReader。
using (var streamReader = new StreamReader(FILE_PATH))
using (var csvReader = new CsvReader(streamReader, new CsvConfiguration(CultureInfo.InvariantCulture) { Delimiter = ";", Encoding = Encoding.UTF8 }))
{
var records = csvReader.GetRecords<SKU>().ToList();
}
Run Code Online (Sandbox Code Playgroud)
我认为您已经发现需要将分隔符更改为制表符。您还需要确保该属性ValidUntil可为空,然后将“NULL”添加NullValue到TypeConverterOptionsCache
public static void Main(string[] args)
{
var config = new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = "\t"
};
using (var streamReader = new StreamReader(@"C:\Users\Adam\Desktop\C#\price_detail.csv"))
using (var csvReader = new CsvReader(streamReader, config))
{
csvReader.Context.TypeConverterOptionsCache.GetOptions<DateTime?>().NullValues.Add("NULL");
var records = csvReader.GetRecords<SKU>();
}
}
public class SKU
{
public string PriceValueId { get; set; }
public DateTime Created { get; set; }
public DateTime Modified { get; set; }
public string CatalogEntryCode { get; set; }
public string MarketId { get; set; }
public string CurrencyCode { get; set; }
public DateTime ValidFrom { get; set; }
public DateTime? ValidUntil { get; set; }
public decimal UnitPrice { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10536 次 |
| 最近记录: |