使用LINQ查询具有固定长度记录的平面文本文件?

时间:2008-12-05 14:49:55

标签: linq

我的文件中写满了这样的记录:

NCNSCF1124557200811UPPY19871230

代码都是固定长度的,其中一些链接到其他平面文件(有点像关系数据库)。使用LINQ查询此数据的最佳方法是什么?

这是我直观地想出来的,但我想知道是否有更优雅的方式:

var records = File.ReadAllLines("data.txt");
var table = from record in records 
            select new {    FirstCode = record.Substring(0, 2), 
                            OtherCode = record.Substring(18, 4) };

2 个答案:

答案 0 :(得分:3)

首先,我不会把它全部读入内存中。编写一个LineReader类非常容易,它一次迭代一行文件。我在MiscUtil中有一个你可以使用的版本。

但是,除非您只想读取一次结果,否则您可能希望在结尾处调用ToList()以避免多次读取文件。 (这仍然比阅读所有行并将 保留在内存中更好 - 你只想进行一次拆分。)

一旦你基本上获得了所有表的内存集合,就可以使用普通的LINQ to Objects将它们连接在一起等等。你可能想要使用更复杂的数据模型来获取索引。

答案 1 :(得分:0)

我认为没有更好的方法开箱即用。

可以定义一个平面文件Linq提供程序,它可以使整个事情变得更简单,但据我所知,还没有人。