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

时间:2016-01-24 05:56:35

标签: c# csv

我有一个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代码)

3 个答案:

答案 0 :(得分:1)

解决方案取决于您必须解析的文件。您需要寻找一种可以区分数据和评论的可靠模式。

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

  • 有4行文字。但是你说这在文件中并不一致
  • 文本生命周期可能不包含与数据表相同的逗号数。但这对所有文件来说都不太可靠。
  • 文本和数据之间只有一个空白/空白行。
    • 数据似乎采用word-comma-word格式。如果这是真的,那么应该很容易识别非数据行(任何不包含一个逗号,或者有多个单词等的行)

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

答案 1 :(得分:0)

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

你应该能够很容易地将文件读成字符串,除非它非常庞大。

e.g。

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

答案 2 :(得分:-1)

    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);

这样的东西应该有用,你应该进行一些测试,以确保计数器不是&gt;长度和其他测试来处理错误。

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

此致 Slipoch