0

我有一个制表符分隔的文本文件,如下所示:

customerNo  Offer   Score
1   1   0.273
2   1   0.630
3   1   0.105
4   1   0.219
5   1   0.000
6   1   0.303
7   1   0.760

我的程序中有一个字符串数组,其中包含此文本文件中的所有行。使用 LINQ,我首先想删除任何包含非数字字符(如上面的标题行)或为空的行,然后想将其他行保存为对象列表。在这里,我的对象将是ScoreItem具有以下属性的对象:customerNo、Offer 和 Score。所以最终我从这个文件中得到了 7 个这样的对象。

4

1 回答 1

2

在你的情况下,我会这样做:

File.ReadAllLines("the-file-full-path")
    .Select(x => x.Split('\t'))
    .Where(x =>
           {
               int i;
               return int.TryParse(x[0], out i);
           })
    .Select(x => new ScoreItem
                     {
                         CustomerNo = int.Parse(x[0]),
                         Offer = int.Parse(x[1]),
                         Score = double.Parse(x[2])
                     });

并考虑在最后使用 .ToArray() 或 .ToList() 以防止在进一步的代码中重新枚举该块。

更新:

提供的代码很简单:它不考虑对数据格式文化等进行任何额外检查。为了确保始终根据当前用户的文化设置独立解析数字,必须使用双重解析double.Parse(x[2], CultureInfo.InvariantCulture)(例如)。

于 2013-11-06T18:08:13.240 回答