我有一个标签分隔的文本文件,如下所示:
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个这样的对象。
答案 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)
(例如),而不是。