Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.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助手如何读取具有多个标题行的CSV文件_C#_.net_Csv_Header_Csvhelper - Fatal编程技术网

C# CSV助手如何读取具有多个标题行的CSV文件

C# CSV助手如何读取具有多个标题行的CSV文件,c#,.net,csv,header,csvhelper,C#,.net,Csv,Header,Csvhelper,我正在使用CsvHelper编写一个csv文件,其中包含多个标题行,位于不同的位置(标题具有一定数量的列,但名称不同)。每个标题后的行数不同 是否可以使用CsvHelper查找/迭代csv文件中的不同标题行(可能通过搜索标题列的名称或部分名称),并在每个标题后迭代读取记录?您必须手动执行此操作,逐行读取并决定要执行的操作 开始的示例: CSV文件: 测试1,测试2,测试3 A、 1,富 TestA,TestB,Test3 B、 07a0fca2-1b1c-4e44-b1be-c2b05da5af

我正在使用CsvHelper编写一个csv文件,其中包含多个标题行,位于不同的位置(标题具有一定数量的列,但名称不同)。每个标题后的行数不同


是否可以使用CsvHelper查找/迭代csv文件中的不同标题行(可能通过搜索标题列的名称或部分名称),并在每个标题后迭代读取记录?

您必须手动执行此操作,逐行读取并决定要执行的操作

开始的示例:

CSV文件:

测试1,测试2,测试3

A、 1,富

TestA,TestB,Test3

B、 07a0fca2-1b1c-4e44-b1be-c2b05da5afc7,棒材

void Main()
{
使用(var reader=new StreamReader(“path\\to\\file.csv”))
使用(var csv=new CsvReader(reader,CultureInfo.InvariantCulture))
{
csv.Configuration.HasHeaderRecord=false;
csv.Configuration.RegisterClassMap();
csv.Configuration.RegisterClassMap();
var fooRecords=新列表();
var=新列表();
而(csv.Read())
{
开关(csv.GetField(0))
{
案例“A”://或“Test1”
...
打破
案例“B”://或“TestA”
...
打破
违约:
抛出新的InvalidOperationException(“未知记录类型”);
}
}
}
} 
示例和文档:

您能将CSV文件拆分为多个文件,每个文件都有一个标题吗?这当然是有可能的,但我会从一开始就编写多个文件,而不是一个。但我们的想法是只使用一个CSV文件,因为所有标题都有某种结构。只是标题列的名称和每个标题后的行数是不同的。好吧,几个文件将是“以干净的方式”的障碍。如果你不想目录中杂乱无章的几个文件,可以将它们捆绑在一个zip中?谢谢你的链接,这很有帮助。我必须改变一点,以便能够读取所有记录,直到识别出下一个标题行。另一个问题是,我的csv文件有两个固定列和一些从列表生成的动态列。如果行结构无法映射到固定结构,示例将如何更改?dynamic records=csv.GetRecords();
void Main()
    {
        using (var reader = new StreamReader("path\\to\\file.csv"))
        using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
        {
            csv.Configuration.HasHeaderRecord = false;
            csv.Configuration.RegisterClassMap<FooMap>();
            csv.Configuration.RegisterClassMap<BarMap>();
            var fooRecords = new List<Foo>();
            var barRecords = new List<Bar>();
            while (csv.Read())
            {
                switch (csv.GetField(0))
                {
                    case "A": // Or "Test1"
                        ...
                        break;
                    case "B": // Or "TestA"
                        ...
                        break;
                    default:
                        throw new InvalidOperationException("Unknown record type.");
                }
            }
        }
    }