首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

大文本数据合并,该如何处理

2012-05-28 
大文本数据合并有这样几个3、400M的文本,结构如下:产品名称 单价 数量 总价xxxxnx……后面很多,且各文本中相

大文本数据合并
有这样几个3、400M的文本,结构如下:
产品名称 单价 数量 总价

xxx x n x

……
后面很多,且各文本中相互间产品名称有重复的,重复就要对数量和总价进行相加,
因为每个文本的数据量太大没法读入内存处理,请高手指点。。。。
还有,不能用数据库

[解决办法]

探讨
有这样几个3、400M的文本,结构如下:
产品名称 单价 数量 总价

xxx x n x

……
后面很多,且各文本中相互间产品名称有重复的,重复就要对数量和总价进行相加,
因为每个文本的数据量太大没法读入内存处理,请高手指点。。。。
还有,不能用数据库

[解决办法]
我想了想,这样做:

一、准备保存结果用的数据结构。总价=单价*数量,所以为了效率,最后再自动计算
C# code
List<Product> table = new List<Product>();class Product{    public string name;    public decimal price;    public int count;    private Product()    {    }    public Product(string name, decimal price, int count)    {        this.name = name;        this.price = price;        this.count = count;    }}
[解决办法]
数据量那么大,List<>的膨胀速度确实会很惊人。不行就自己简单地分一下页?

比如每读取5K行就汇总一次,把汇总结果存入一个中间文件,比如temp1.txt。然后再读下一个5K行,依此循环。

最后再对temp1.txt、temp2.txt这些中间文件进行二次汇总。

这么大数据量,不用数据库,真的很麻烦。
[解决办法]
"最重要的是List<Product> table = new List<Product>();装不下合并的结果,没处理完就显示内存溢出了"
LZ,分两个步骤:
1、用HashTable,哈希表的空间伸缩范围要大。
2、遍历文本同时,进行计算处理,不能先装,在合并,这样消耗内存太大了!

如果哈希表都不能解决你的问题,建议先把文本导入到数据库中,在进行处理,毕竟数据库伸缩的空间比内存要大多了。。。。

热点排行