use*_*174 3 c# csv string parsing
我有以下刺痛
const string csv = "Foo1,Foo2,Foo3,Foo4,Foo5,Foo6,Ping Pong\n" +
"2016-02-29,1437.530029,1445.839966,1433.77002,1436.930054,34016300,1436.930054\n" +
"2016-02-25,1431.439941,1431.439941,1421.280029,1426.97998,78076500,1426.97998\n" +
"2016-02-24,1430.459961,1432.430054,1417.449951,1419.790039,29049900,1419.790039\n";
Run Code Online (Sandbox Code Playgroud)
我怎么能把它转换到List<Model>
哪里
public class Model
{
public string Foo1 { get; set; }
public string Foo2 { get; set; }
public string Foo3 { get; set; }
public string Foo4 { get; set; }
public string Foo5 { get; set; }
public string Foo6 { get; set; }
public string Ping_Pong { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
请注意Ping Pong我的orig csv 中的标题
我尝试使用CsvHelper,但没有成功,因为它采取流而不是字符串,我尝试转换解析失败
编辑对我来说无论是否使用CsvHelper并不重要,最后我想将csv转换为List<Model>
我怎样才能做到这一点?
Art*_*aca 10
您可以创建一个StringReaderusing csv变量:
var textReader = new StringReader(csv);
var csvr = new CsvReader(textReader);
var records = csvr.GetRecords<Model>();
Run Code Online (Sandbox Code Playgroud)
如果你想要自己的解析器:
var lines = csv.Split(new char[] {'\n'}, StringSplitOptions.RemoveEmptyEntries).Skip(1);
List<Model> models = new List<Model>();
foreach (var item in lines)
{
var values = item.Split(',');
var model = new Model
{
Foo1 = values[0],
Foo2 = values[1],
Foo3 = values[2],
Foo4 = values[3],
Foo5 = values[4],
Foo6 = values[5],
Ping_Pong = values[6],
};
models.Add(model);
}
Run Code Online (Sandbox Code Playgroud)
编辑:
要使用CsvHelper您解决标头问题,您需要创建一个映射配置类,指定标头和属性之间的映射:
public class ModelMap : CsvClassMap<Model>
{
public ModelMap()
{
Map(m => m.Foo1);
Map(m => m.Foo2);
Map(m => m.Foo3);
Map(m => m.Foo4);
Map(m => m.Foo5);
Map(m => m.Foo6);
Map(m => m.Ping_Pong).Name("Ping Pong");
}
}
Run Code Online (Sandbox Code Playgroud)
使用这样:
var textReader = new StringReader(csv);
var csvr = new CsvReader(textReader);
csvr.Configuration.RegisterClassMap<ModelMap>();
var records = csvr.GetRecords<Model>();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7202 次 |
| 最近记录: |