首页 > 解决方案 > 从 C# 中的特定标题名称读取 csv 文件

问题描述

我想读取一个 csv 文件,其中标题行从特定列名开始,即“名称”</p>

CSV 文件格式如下所示:

v3,vf,gf--Not a Header row 1
v1,c,z1,e--Not a Hera  row 2
name,q1,q2,q3- Header Row- row 3-because name is here
a,0,1,2-Data

我想阅读“名称”列存在的位置 - 所以我想跳过前 2 行,但在“名称”之前我们不知道会出现多少行,它可能是 2 或 3 或 n

标签: c#.net

解决方案


逐行阅读,然后扔掉这些行,直到到达所需的标题行。然后,解析剩余的行。

IEnumerable<string[]> ReadDataLines(string csv) {   
    using(var reader = new StringReader(csv))
    using(var parser = new Microsoft.VisualBasic.FileIO.TextFieldParser(reader)) {
        parser.TextFieldType = Microsoft.VisualBasic.FileIO.FieldType.Delimited;
        parser.SetDelimiters(",");

        // Until we find the header row, just throw away all the rows
        while(!parser.EndOfData) {
            var line = parser.ReadLine();
            if(line != null && line.TrimStart().StartsWith("name")) {
                break;
            }
        }       
        // The rest of the input is data rows
        while(!parser.EndOfData) {
            yield return parser.ReadFields();
        }       
    }
}

在这里,我使用 Microsoft.VisualBasic.FileIO.TextFieldParser 来解析 CSV(请参阅Reading CSV files using C#)。您当然可以使用任何您想要解析 CSV 的技术,可以使用相同的通用方法。


推荐阅读