删除CSV文件真实内容上方的文本

本文关键字:文本 CSV 文件 真实 删除 | 更新日期: 2023-09-27 18:31:34

我有一个CSV,其作者,令人讨厌的是,决定在内容本身之前"引入"文件。总而言之,我有一个看起来像这样的 CSV:

This file was created by XXXXYY and represents the crossover between YY and QQQ. 
Additional information can be found through the website GG, blah blah blah...
Jacob,   Hybrid
Dan,  Pure
Lianne,   Hybrid
Jack,  Hatchback

所以这里的问题是我想在 CSV 文件的"真实内容"开始之前删除前几行。我在这里寻找健壮性,因此例如使用 Streamreader 并删除第 4 行之前的所有内容并不理想(加上文本的长度可能会有所不同)。

有没有办法只读取重要内容并将新的CSV写入目录路径?

问候成因

(编辑 - 我正在寻找 C 尖锐代码)

删除CSV文件真实内容上方的文本

解决方案取决于您必须解析的文件。您需要寻找一种可靠的模式来区分数据与注释。

在您的示例中,有一些可能性在其他文件中可能相同:

  • 有 4 行文本。但是您说这在文件之间不一致
  • 文本生存期可能不包含与数据表相同的逗号数。但这不太可能对所有文件都可靠。
  • 文本和数据之间有一条空白/仅空格行。
    • 数据似乎采用单词-逗号-单词的形式。如果这是真的,应该很容易识别非数据行(任何不包含一个逗号或有多个单词等的行)

您可以使用这些启发式方法的组合来更可靠地检测数据。

您可以按行扫描(查找 ''r')并忽略没有与您的 csv 匹配的逗号计数的行。

您应该能够非常轻松地将文件读入字符串,除非它非常大。

例如

var csv = "some test'r'nsome more text'r'na,b,c'r'nd,e,f'r'n";
var lines = csv.Split(''r'n');
var csvLines = line.Where(l => l.Count(',') == 2);
// now csvLines contains only the lines you are after
    List<string> info = new List<string>();
    int counter = 0;
// Open the file to read from.
    info = System.IO.File.ReadAllLines(path).ToList();
// Find the lines up until (& including) the empty one
    foreach (string s in info)            
    {
        counter++;
        if(string.IsNullOrEmpty(s))
            break; //exit from the loop
    }
// Remove the lines including the blank one.
    info.RemoveRange(0,counter);

这样的事情应该可以工作,您可能应该进行一些测试以确保计数器的长度不>,并执行其他测试来处理错误。

您可以调整此代码,以便它只使用 linq 或其他东西找到空行号,但我不喜欢 linq 的开销(是的,考虑到我使用的是 c#,具有讽刺意味)。

问候斯利波奇