我正试图使用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)?
你不需要同时使用属性和类映射。如果你使用属性映射,你不需要注册一个类映射。
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扩展,输出变量。