如何:打开双空格分隔文件&跳过第一行

时间:2012-03-02 19:41:25

标签: c# linq list

这对你来说可能是一个非常简单的问题,但我很难过。我正在尝试读取具有双倍空格作为分隔符的文本文件。

"ColHdr1"  "ColHdr2"  "ColHdr3"  "ColHdr4"  "ColHDR5"
"fu"  "bar"  1  2  3
"lorem"  "ipsum"  5  6  7

我想将所有行放入除标题行之外的列表中。这是我到目前为止的代码:

string prnFile = @"c:\temp\test.prn";

var fileLines = new List<string>();

foreach (var line in File.ReadAllLines(prnFile, Encoding.GetEncoding(1250)).Skip(1))
{
    fileLines.Add(line.Split(new[] { "  " }, 
                StringSplitOptions.RemoveEmptyEntries));
}

最后,我希望列表看起来像:

"fu"  "bar"  1  2  3
"lorem"  "ipsum"  5  6  7

知道我做错了吗?

1 个答案:

答案 0 :(得分:3)

你的代码一见钟情,但我一直都在使用LINQ:

var lines = File.ReadLines(prnFile, Encoding.GetEncoding(1250))
                .Skip(1)
                .Select(line => line.Split(new[] { "  " }, 
                                          StringSplitOptions.RemoveEmptyEntries))
                .ToList();

那会给你一个List<string[]>。它似乎对我有用,但请注意它不会从字符串的开头/结尾删除双引号。

如果你真的想要一个扁平列表,这非常简单 - 只需将Select更改为SelectMany

var lines = File.ReadLines(prnFile, Encoding.GetEncoding(1250))
                .Skip(1)
                .SelectMany(line => line.Split(new[] { "  " }, 
                                          StringSplitOptions.RemoveEmptyEntries))
                .ToList();

这会给你:

"fu"
"bar"
1
2
3
"lorem"
"ipsum"
5
6
7