一个数据处理问题!(易)(50分)

  • 主题发起人 主题发起人 nuke
  • 开始时间 开始时间
N

nuke

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做毕业设计时遇到这样一个问题.
就是在有大量文本数据时(非数据库)
比如说电子邮件,每一封电子邮件对应着一大段文本。
我是简单的用分隔符比如'The XXX part data--------'
把不同段的文本分开,要用数据的时候再根据分隔符来判断度曲相应的
信息.
但这样数据一多,比如有上千封邮件,每次对其中的某一邮件编辑都要
对整个文件进行重新保存和读取.万一文件有几MB,那速度是可想而知
的.
请问各位大虾有何妙招能提高效率,加快处理速度(最好简单易行)
可别告诉我把每个邮件单独存储哦!

 
加个文件头,包括有多少邮件,每个邮件的大小。
然后可用BlockRead,BlockWrite。
 
把每封信都存为文件不就得了.
对了,我回答过你n道问题,在不给我分,我就.....
 
吧唧...哄 (一个大跟头)
唐晓锋你看我最后一句话是什么?(....马上我就给分...怕怕的说.......)
amo 的方法我也想过,实现起来太麻烦,因为邮件内容(长度)随时都可能变更.
我曾有一个疯狂的想法就是把每个邮件存为一个文件再打包成一个压缩包
然后在内存中还原为文件.
后来想想这方法也太烂,而且效率似乎更低了.
:.....(
 
hehe ,每看到 :)
好像outlook,就是这么做的,处理速度也没有见慢!
 

建立一个类似索引文件的东西吧。
你可以发现Foxmail , Outlook Express
中存储邮件的方法, 一个主文件, 一个索引文件。
Record :
begin

标题 : string(255) ;
日期 : TDate ;
起始位置 : Integer ;
长度 : Integer ;
...
End
 
建议你把你的邮件以数据库方式保存起来,然后建立关联索引
这样做的好处有:
1。 起码日后查询的话,使用数据库方法很方便
2。 充分利用BDE查询排序检索能力,查询速度快(除非你的查询方式比BDE的还要
快?)
唐晓锋先生关于每一封邮件单独保存一个文件的提法不合理。
看一下市面上能找到的EMAIL 客户端,比如FOXMAIL,BEACKY之类
都是有自己的数据库和索引方式,最独特的是NEWS客户端 FREE AGENT
我的 AGENT客户端保存的信件超过20万封 ,将近700M,检索速度非常快
也是因为保存使用了数据库而非文本文件

另外, DELPHI支持自定义的文本数据库,你如果不愿意把自己的文本文件
转换为数据库的话, 在访问自己的文本文件时,使用自定义文本数据库方式
访问应该比你自己访问要快
 
多谢王寒松指点!
我是想避开数据库 :)
 
为什么要避开数据库
不想连BDE一起发布是吗?
可以用ClientDataSet,
保存到文件、从文件读取很方便,
也可以象普通TDataSet一样操作,
查询可以用过滤条件实现
我觉得挺好的。
 
to 李颖:
clientDataSet? 如何用,能否详细解释一下?
 
我的本意也想是避开数据库,自己编程解决.
其实现在带原码的脱离bde链接数据库的控件也不少,
看来是没什么好办法了,就算自己解决也是编出一个类似数据库的东东来罢了.
再等一会儿,看有没有高人能解决,没有的话就分赃吧
 
活跃脑筋:
在 (a)数据存放有一定规律 , (b)数据的量有很大的情况下
你不采用数据库技术,我认为是很不明智的。
除非你能写出和数据库搜索查询引擎一样的算法来
或是你的算法速度, 邮件管理核心的方便性 能让你满意
 
1.处理大量的数据必须要建立索引.
2.计算机处理等长数据的效率一般比较高,所以建立索引的
第一步是把可以等长化的数据提取出来,建立第一个索引.
3.对不等长的数据,有一种方法可以将其等长化.这种方法就
是Hash.作为文本串,用Hash的方法索引是比较高效的.
4.针对e-mail这种应用,可以将时间/收发方等信息抽象为等
长索引,而标题用Hash索引.至于内容,一般可以不用索引,
而用索引中的指针代替.
 
多人接受答案了。
 
后退
顶部