C# 列名垂直时从CSV读取值
我有一个CSV helper的实现,它当前以传统格式读取CSV:C# 列名垂直时从CSV读取值,c#,csv,csvhelper,C#,Csv,Csvhelper,我有一个CSV helper的实现,它当前以传统格式读取CSV: Name, Address, Age "Foo", "Foo's address", 24 "Bar", "Bar's address", 19 我使用类映射按名称将字段映射到Person对象,方法如下: using (var reader = new StreamReader(file, Encoding.UTF8)) { using (var csvReader = new CsvReader(reader))
Name, Address, Age
"Foo", "Foo's address", 24
"Bar", "Bar's address", 19
我使用类映射按名称将字段映射到Person对象,方法如下:
using (var reader = new StreamReader(file, Encoding.UTF8))
{
using (var csvReader = new CsvReader(reader))
{
csvReader.Configuration.RegisterClassMap<ContentMapper>();
var records = csvReader.GetRecords<Person>().ToArray();
}
}
在保留原始映射的同时,以这种格式处理CSV的最佳方法是什么?试试这个方法
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
public int Age { get; set; }
public List<Person> ReadFile(string path)
{
char[] charsToTrim1 = {'\\', ' ', '"', '\"'};
var fileData = File.ReadAllLines(path);
var outputData = new List<Person>();
for (var i = 0; i < fileData.Length; i++)
{
var tmpData = fileData[i].Split(',');
for (var j = 0; j < tmpData.Length; j++)
{
var t1 = tmpData[j].Trim(charsToTrim1);
if (j == 0)
continue;
switch (i)
{
case 0:
{
var tmPerson = new Person {Name = t1};
outputData.Add(tmPerson);
}
break;
case 1:
{
outputData[j - 1].Address = t1;
}
break;
case 2:
{
outputData[j - 1].Age = Convert.ToInt32(t1);
}
break;
}
}
}
return outputData;
}
}
公共类人物
{
公共字符串名称{get;set;}
公共字符串地址{get;set;}
公共整数{get;set;}
公共列表读取文件(字符串路径)
{
char[]charsToTrim1={'\\','''''''''','\''};
var fileData=File.ReadAllLines(路径);
var outputData=新列表();
for(var i=0;i
试试这个
public class Person
{
public string Name { get; set; }
public string Address { get; set; }
public int Age { get; set; }
public List<Person> ReadFile(string path)
{
char[] charsToTrim1 = {'\\', ' ', '"', '\"'};
var fileData = File.ReadAllLines(path);
var outputData = new List<Person>();
for (var i = 0; i < fileData.Length; i++)
{
var tmpData = fileData[i].Split(',');
for (var j = 0; j < tmpData.Length; j++)
{
var t1 = tmpData[j].Trim(charsToTrim1);
if (j == 0)
continue;
switch (i)
{
case 0:
{
var tmPerson = new Person {Name = t1};
outputData.Add(tmPerson);
}
break;
case 1:
{
outputData[j - 1].Address = t1;
}
break;
case 2:
{
outputData[j - 1].Age = Convert.ToInt32(t1);
}
break;
}
}
}
return outputData;
}
}
公共类人物
{
公共字符串名称{get;set;}
公共字符串地址{get;set;}
公共整数{get;set;}
公共列表读取文件(字符串路径)
{
char[]charsToTrim1={'\\','''''''''','\''};
var fileData=File.ReadAllLines(路径);
var outputData=新列表();
for(var i=0;i
这可能需要清理一下,但它似乎确实有效
- 使用CsvHelper将记录作为
List
- 将记录旋转到新的
,使每行中的第一个字段成为动态记录的属性名称列表中
- 使用CsvHelper将新列表写入内存
- 使用CsvHelper使用
ClassMap
公共类程序
{
公共静态void Main(字符串[]args)
{
var flippedRecords=新列表();
使用(MemoryStream stream=new MemoryStream())
使用(StreamWriter=新StreamWriter(流))
使用(StreamReader=新StreamReader(stream))
使用(CsvReader csv=新CsvReader(读卡器))
{
WriteLine(“姓名、Foo、Bar”);
writer.WriteLine(“地址,Foo的地址,\“带逗号的酒吧地址”);
WriteLine(“年龄,24,19”);
writer.Flush();
流位置=0;
csv.Configuration.HasHeaderRecord=false;
//从CSV文件中获取记录。
var records=csv.GetRecords().ToList();
//将记录旋转到新的动态列表中。
var rows=新列表();
foreach(记录中的var行)
{
添加(行作为IDictionary);
}
对于(int i=2;i m.FirstName).Name(“Name”);
Map(m=>m.Address);
Map(m=>m.Age);
}
}
这可能需要清理一下,但它似乎确实有效
- 使用CsvHelper将记录作为
List
- 将记录旋转到新的
,使每行中的第一个字段成为动态记录的属性名称列表中
- 使用CsvHelper将新列表写入内存
- 使用CsvHelper使用
ClassMap
公共类程序
{
公共静态void Main(字符串[]args)
{
var flippedRecords=新列表();
使用(MemoryStream stream=new MemoryStream())
使用(StreamWriter=新StreamWriter(流))
使用(StreamReader=新StreamReader(stream))
使用(CsvReader csv=新CsvReader(读卡器))
{
WriteLine(“姓名、Foo、Bar”);
writer.WriteLine(“地址,Foo的地址,\“带逗号的酒吧地址”);
WriteLine(“年龄,24,19”);
writer.Flush();
流位置=0;
csv.Configuration.HasHeaderRecord=false;
//从CSV文件中获取记录。
var records=csv.GetRecords().ToList();
//将记录旋转到新的动态列表中。
var rows=新列表();
foreach(记录中的var行)
{
添加(行作为IDictionary);
}
对于(int i=2;i m.FirstName).Name(“Name”);
Map(m=>m。