Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列名垂直时从CSV读取值_C#_Csv_Csvhelper - Fatal编程技术网

C# 列名垂直时从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))

我有一个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))
    {
        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。