F firstshine Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-06 #1 一个文本文件,大约1000000行到2000000行,每一行的字符数不等,文件大小可能有100M,现在请问,如何快速的读谢某一行。 我想,定位是关键,对吗?
K kouchun Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-06 #2 建議把文件細分為1000個文件,每個文件1000行,這樣就快很多了,需要時再合併文件.. 或者把文化全部載入ram中操作...
B bjdribllec Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-06 #4 把每行都用空格凑成等长的,这样就可随机访问了.
F firstshine Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-06 #5 如果每行都用空各凑成等长的,那么这个文件所占用的空间就不会是100M了,可能会达到1G以上
M mstar Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-07 #8 “数据库的性能不行,和文件比差远了” 你是否没有给表加索引呀
B bjdribllec Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-07 #9 那就只有用lance2000的方法了,楼主要求快速读写某一行,在写的时候,那行的长度一旦改变(说极端点:就改写第一行)文本文件的操作不会是快速的。
S skadon Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-07 #10 用数据库,每行一个记录,想要哪行就select * from table where id=### 这时候是文件不能与数据库相比。要是闲数据库安装麻烦,就下个mysql,不用安装,要用的时候就启动,不用就关掉,不浪费资源,只占用一点硬盘空间,系统重装也不用管。
用数据库,每行一个记录,想要哪行就select * from table where id=### 这时候是文件不能与数据库相比。要是闲数据库安装麻烦,就下个mysql,不用安装,要用的时候就启动,不用就关掉,不浪费资源,只占用一点硬盘空间,系统重装也不用管。
S shiyj Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-13 #11 还有一个办法, 就是在文件的头部增加一块数据,记录各行的长度。然后使用随机方式访问文件,使用时要计算指定行的开始位置。
Z zLight Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-13 #13 ../Borland/Delphi6/Demos/Db/TextData 看看这个能不能帮点忙?每行的长度是可变的...
L LingWing Unregistered / Unconfirmed GUEST, unregistred user! 2004-04-13 #14 1. 简单的办法,一次性将文件读入内存,即使用TStringList进行处理,但可能需要Delphi7版本以上。这样的话,随机读写都比较灵活,文件的装入和保存速度也都还可以。这是简洁的办法。 2. 笨一点的办法,定义一个不定长的字符串类型数组变量(如 tmpArray: array of string 长度视文件行数变化 ),这样虽然不失读写的灵活性,但文件的装入和保存非常慢,而且可变类型数组操作远不如TStringList类型来得方便。 3. 第三种方案,化整为零,即将文件读入若干个内存块进行处理,参考方法1。对于几百MB的文件可以考虑。但以个人的经验来看,100MB以内的文件一次性读入并不是什么大问题。 4. 就庞大规模的文件,如几百MB的文件而言,可以考虑索引技术。用一个索引文件计录数据文件各行的位置和长度,但由于数据文件是线性存储的,行内容的修改并不轻松,需要特殊的处理。人们可能想到不同的方法,但需要实践测试之后才好说。弊人以为,用好TStrings类型进行灵活的处理是上策。
1. 简单的办法,一次性将文件读入内存,即使用TStringList进行处理,但可能需要Delphi7版本以上。这样的话,随机读写都比较灵活,文件的装入和保存速度也都还可以。这是简洁的办法。 2. 笨一点的办法,定义一个不定长的字符串类型数组变量(如 tmpArray: array of string 长度视文件行数变化 ),这样虽然不失读写的灵活性,但文件的装入和保存非常慢,而且可变类型数组操作远不如TStringList类型来得方便。 3. 第三种方案,化整为零,即将文件读入若干个内存块进行处理,参考方法1。对于几百MB的文件可以考虑。但以个人的经验来看,100MB以内的文件一次性读入并不是什么大问题。 4. 就庞大规模的文件,如几百MB的文件而言,可以考虑索引技术。用一个索引文件计录数据文件各行的位置和长度,但由于数据文件是线性存储的,行内容的修改并不轻松,需要特殊的处理。人们可能想到不同的方法,但需要实践测试之后才好说。弊人以为,用好TStrings类型进行灵活的处理是上策。