从制表符分隔的文本文件中获取数值数据并将其存储在列表中

时间:2013-11-06 17:51:43

标签: c# .net linq

我有一个标签分隔的文本文件,如下所示:

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个这样的对象。

1 个答案:

答案 0 :(得分: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) (例如),而不是。