如何利用csvhelper从csv文件中解析出一个特定的值 c#。

问题描述 投票:0回答:1

我正试图使用csvHelper来解析某个csv文件。该文件构成如下。

value: 333_345, nextval: 5578

val, 1val
200, 300

这个csv文件的独特之处在于这一行(value: 333_345, nextval: 5578)并不是标题,而真正的标题要到这一行(val, 1val)才会开始

我知道,到了头部(val,1val),我可以直接调用跳过记录函数,一路跳到那里。我的问题是,我怎样才能从第一行中得到值?

特别是这些(value: 333_345, nextval: 5578)

我目前尝试的是这样的。

using (StreamReader reader = new StreamReader(@"path"))
            using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
            {
                csv.Configuration.RegisterClassMap<FooMap>();//necessary for mapping 
                csv.Read();
                var records = csv.GetField(0);
            }
.
.
.

 public class Foo
    {
        [Index(0)]
        public string value { get; set; }


    }


    public class FooMap : ClassMap<Foo>
    {
        public FooMap()
        {
            Map(m => m.value).Index(0);

        }
    }

通过设置索引为[0],我得到了第一行, 但它给我的是一个水平的字符串。

v
a
l
u
e
:
3
3
3
_
3
4
5

我要怎么做才能让它只返回(333_345)?

c# csv parsing csvhelper
1个回答
0
投票

你不需要同时使用属性和类映射。如果你使用属性映射,你不需要注册一个类映射。

void Main()
{
    var s = new StringBuilder();
    s.AppendLine("value: 333_345, nextval: 55578");
    s.AppendLine();
    s.AppendLine();
    s.AppendLine("val, 1val");
    s.AppendLine("200, 300");
    using (var reader = new StringReader(s.ToString()))
    using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
    {
        csv.Read();

        var val = csv.GetField(0);
        var nextval = csv.GetField(1);

        csv.Read();
        csv.ReadHeader();

        var records = csv.GetRecords<Foo>().ToList();

        records.Dump();
    }
}

public class Foo
{
    [Index(0)]
    public string Value { get; set; }
    [Index(1)]
    public string Value1 { get; set; }
}

注意 Dump() 是一个LINQPad扩展,输出变量。

© www.soinside.com 2019 - 2024. All rights reserved.