【发布时间】:2020-02-21 15:54:14
【问题描述】:
我有一个方法可以将一个简单的 CSV 文件读入 IList,然后我将使用它进行一些查询和处理数据,然后将一些内容写入另一个文件。我已设法将数据读入此列表,确保跳过任何空行或空/空白行,但我有一个问题:大约每 200 条记录(这不是确切的,可能有点早或晚, ) 我有一个写入 CSV 文件的标题行。将此数据放入我的 IList 时,我需要确保跳过读取该标题行(以第 1 列中的字符串“名称”开头)。该标题行可能在数据源中出现多次,因此我需要确保在此方法中检查每一行,因为它将数据读取到列表中,并让它跳过任何以开头的“标题”行/行第 1 列中的“名称”。
我将数据读入列表的代码如下。有什么建议么?我无法真正控制需要读取的 CSV 文件,因此在将数据读入程序时需要清理和忽略该行。
string path2 = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
string csvPath = path2 + "\\" + "AleksReport.csv";
public static IList<string> ReadFile(string csvPath)
{
List<string> myList = new List<string>();
return (from line in File.ReadAllLines(csvPath)
where !string.IsNullOrWhiteSpace(line)
let columns = line.Split(',')
where columns.Length >= 2 &&
!string.IsNullOrWhiteSpace(columns[0]) &&
!string.IsNullOrWhiteSpace(columns[1]) &&
select line).ToList();
}
【问题讨论】:
-
我建议使用 CSVHelper 而不是尝试手动解析它。 CSV 比“以逗号分隔”复杂得多
-
仅供参考,您的代码不适用于包含逗号内部值的 CSV,例如:
"value with ,",value with no comma -
where !string.IsNullOrWhiteSpace(line) && !line.StartsWith("Name")怎么样? -
标题不应该是第一行吗?阅读第一行,记住它并在以后跳过任何类似的行不应该是一个难题。
-
@Amy 我对此持开放态度,但我仍然需要使用相同的源文件,大约每 200 条记录出现一个“标题行”。您对使用 CSVHelper 的代码有什么建议吗?
标签: c# list csv console-application