超大文本内容操作问题

震我一下巧克力 2010-03-11 10:12:29
假如有一个文本文件,约20G左右大小

内容类似:
...
535424 小王 1986-01-11
435435 小欣 1987-07-11
364514 小丽 1987-07-11
154878 小晋 1979-02-18
...


现在要先按日期排序,再按编号排序,然后保存到硬盘上
最后保存到硬盘上的文本应该是这样的
...
154878 小晋 1979-02-18
535424 小王 1986-01-11
364514 小丽 1987-07-11
435435 小欣 1987-07-11
...

备注:这个文本很大,暂且当做20G左右吧,你只有一台普通的台式电脑!
...全文
188 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
msnadair 2010-03-12
  • 打赏
  • 举报
回复
大家还是别帮他了。估计这人有非法嫌疑
msnadair 2010-03-12
  • 打赏
  • 举报
回复
20G的文本文件你能打开吗? 肯定看不了。

你这种初始的设计将数据保存到一个TXT就是个错误!
tiandejun 2010-03-12
  • 打赏
  • 举报
回复
你还是 建立做个 tex把

一个txt很明显不行

就像数据库一样 你不能 只有一个表
特别安静 2010-03-12
  • 打赏
  • 举报
回复
一个文本文件就保存这么简单的行就占了20G
那记录数估计就是天文数字了···
恐怖
sito_hongta 2010-03-12
  • 打赏
  • 举报
回复
先導入數據庫,排序後,再輸出Txt文件
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 lai3345678 的回复:]
不知道你想问什么!!!难度是测试txt能放多少东西???
[/Quote]
就是完成要求的操作,怎么做?
“现在要先按日期排序,再按编号排序,然后保存到硬盘上,最后保存到硬盘上的文本应该是这样的”
Zhujing0866 2010-03-12
  • 打赏
  • 举报
回复
由于文件很大,一步完成不现实。
可以分几步完成:
1.新建一个数据库,按照日期不同创建N张表,表格书就如你的数据形式。在编号上加索引
2.以数据流的形式打开此文件,一步一步的读出数据,然后按照日期判断,添加到各自的表中。直到数据读取完毕。
3.新建一个新的文件,以保存新数据。
4.按日期从小到大,从数据库相应的表中读取数据,然后向新文件追加(AppendText),直到把所有数据读取完毕。

说明:
读取时必须以数据流形式,否则20G是打不开的。写文件时也必须以追加形式。
由于文件太大,处理这个数据需要较长时间。


还有一点不理解,为什么要做这个处理?

Kyale 2010-03-12
  • 打赏
  • 举报
回复
咦?兔子党沉默不语哇
周药师 2010-03-12
  • 打赏
  • 举报
回复
现在要先按日期排序,再按编号排序?
20 G大的
Win32 程序支持最大的内存是1.7G
需要分块去读数据,分块排序

lz这样的设计是不合理的 木有意义去做
cjcgy 2010-03-12
  • 打赏
  • 举报
回复
外排序吧。
不过说归说, 真做的话, 还真没做过。

每行数据一样多么? 还是按回车分割?
cshava 2010-03-12
  • 打赏
  • 举报
回复
用数据库库把,20G恐怕xml,access都用不起来,用sql server排序就用sql中的order by
chichenzhe 2010-03-12
  • 打赏
  • 举报
回复
只有通融的方式处理。

我做过 电话号码.txt处理,2G-5G。算是有经验。
我们的数据不太在意丢失,所以我直接用工具FileTool.exe 把文件分成n份。
之后按排序 再生成排序好的N个文件。
myrroom 2010-03-12
  • 打赏
  • 举报
回复
分段读入数据库,然后在排序输出到文件比较简单
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 msnadair 的回复:]
大家还是别帮他了。估计这人有非法嫌疑
[/Quote]
你水平不行就把嘴闭上
a68351153 2010-03-11
  • 打赏
  • 举报
回复
20G, 看起来还全部是个人描述信息。 这是多少人口呵呵

上面几楼都提到了处理时回涉及的问题,数据量太大,一般一次性加载不可能,分段并加入优化的一些处理方式或许可行。但是个人觉得,这些信息有些明显的特点:格式一致,每条记录信息简单。

对于如果考虑要将这些信息做“排序”的工作,有限的相当长的一段时间是可以做完的,但是咱们做事,得尽量讲个效率是不!

我个人想,是否可以分段,并转化格式,如XML的,再进行排列的处理,当然加入强机器更好。

但lz说就一台一般的机器,那就看自己的算法之类的,是否处理高效了.....
jingzhongrong 2010-03-11
  • 打赏
  • 举报
回复
内存映射,CreateFileMapping、MapViewOfFile,分块进行映射,然后进行读取,排序。
归并排序(用文件进行缓存)
还是通过内存映射将数据写入。
wuyq11 2010-03-11
  • 打赏
  • 举报
回复
20G内容太多了
分块文件读取数据
lzsh0622 2010-03-11
  • 打赏
  • 举报
回复
(1)放内存一般机器是放不下的
(2)在硬盘折腾一次20G的数据,需要不短的时间
(3)比较算法效率也是个问题

倒进数据库吧,数据库已经提供了高效排序算法及其它管理功能。

xingyuebuyu 2010-03-11
  • 打赏
  • 举报
回复
大文件都是用文件映射做的,就像UtralEdit.
UtralEdit可以打开你的那个大文件吗
lai3345678 2010-03-11
  • 打赏
  • 举报
回复
不知道你想问什么!!!难度是测试txt能放多少东西???
加载更多回复(1)

110,561

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧