【问题标题】:Header with name [0] not found未找到名称为 [0] 的标头
【发布时间】:2021-06-08 12:18:30
【问题描述】:

我有这个 csv 文件,我需要能够读取它,但我无法让它工作。这是csvpicture of csv。我不确定问题是什么,我一直在关注教程,所以我猜测它可能与 csv 文件及其使用的间距有关。我无法更改 csv 中的任何内容。 我尝试将 Name 属性添加到类以及索引属性。

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; }

}

调试输出:

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

【问题讨论】:

标签: c# csvhelper


【解决方案1】:

我认为您已经发现需要将分隔符更改为制表符。您还需要确保属性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; }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-05
    • 2017-11-11
    • 2012-09-03
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多