【问题标题】:C# Console App - Remove lines in list that start with stringC# 控制台应用程序 - 删除列表中以字符串开头的行
【发布时间】: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) &amp;&amp; !line.StartsWith("Name") 怎么样?
  • 标题不应该是第一行吗?阅读第一行,记住它并在以后跳过任何类似的行不应该是一个难题。
  • @Amy 我对此持开放态度,但我仍然需要使用相同的源文件,大约每 200 条记录出现一个“标题行”。您对使用 CSVHelper 的代码有什么建议吗?

标签: c# list csv console-application


【解决方案1】:

所以,看起来,通过一些 cmets--我发现了我的问题!在完成查询和数据转换后,当我将文件写回结果数据集时,通过在每一行上进行字符串比较来管理这一点。我可以放心地忽略我不需要担心的行。它确实涉及一个快速的额外读/写功能,但它是如此微不足道!

我不敢相信我竟然傻到忽略了这么基本的东西。谢谢大家!

【讨论】:

    猜你喜欢
    • 2017-05-28
    • 1970-01-01
    • 2015-11-21
    • 2011-07-25
    • 1970-01-01
    • 2012-06-19
    • 2013-01-27
    • 1970-01-01
    • 2015-02-03
    相关资源
    最近更新 更多