通行证: 用户 密码 域名空间  下载中心 社区论坛 信息公告 my小屋
联系我们
设为首页
加入收藏

 

qq,asp,php,jsp,xml,sql,.net,编程 程序 网页图象 建站经验 私服
首页 | 新闻资讯 | 编程开发 | 网页设计 | 图形图象 | 网络媒体 | 网站模板 | 数 据 库 | 投稿
论坛 | 操作系统 | 系统优化 | 网络安全 | 黑客技术 | 硬件学堂 | 硬件报价 | 服 务 器 | 地图
专题 | 应用软件 | 聊天通讯 | q q 专栏 | 建站经验 | 在线工具 | 站长club | 注 册 表 | 旧版
社会 | 游戏娱乐 | 设计欣赏 | 疑难解答 | 社区论坛 | 韩国素材 | 素材图库 | 广告服务 | 服务
当前位置:首页>>在线服务>>疑难解答>>正文 新版上线![旧版]
注:打开慢时请稍等

如何获得txt文件中的一行数据?

http://www.iyit.net  日期:2006-10-6 15:13:37  来源:iyit.net收集  点击:
参加讨论
我看了很多单文本数据的留言簿程序,发现这些程序效率很低,每次都要完全读入整个文件,  
现求一种方法,可以获得我想要的一行数据,而又只读取那一行数据!  
只能使用php!  
---------------------------------------------------------------  
 
使用fseek()定位  
然后fgets  
---------------------------------------------------------------  
 
不是所有人都喜欢那么笨,是因为!文件只能那么读!这是磁盘原理!你就别做梦了!所以大家都如此写,我一直用文本存储数据!你的问题应该看磁盘存储原理你就file,explode这么读吧!  
---------------------------------------------------------------  
 
也许  
$fd  =  fopen(...);  
for($i=0;$i<n;$i++)  
 $str  =  fgets($fd);  
$str  =  chop($str);  
对于大文件来说可以做得更好一些。  
---------------------------------------------------------------  
 
如果你保存文件时强制你的每个记录的大小,比如1k,如果不足1k则结尾用空格填充,那么你用fseek()然后fgets将非常快。  
fseek($fd,1000*n,seek_set);  
$content  =  fread($fd,1000);  
$content  =  rtrim($content);  
---------------------------------------------------------------  
 
我觉得是,假设你有一个100000个记录的文本文件,如果强制记录的话大概是  
100m,你只要打开文件,然后定位到某个位置,并读取1k大小的数据。时间应该很快,占用内存资源也很少。  
如果你是用file()方法将文件读到数组中,再读取单个的记录的话,我想,怎么着也不能比上一个方法强吧。  
而且,你在留言中肯定应该可以存在多行内容吧,用file()方法你需要先对留言进行特殊处理在保存到文件中,而固定记录的话,你只需要添加就行了。  
但是固定记录对需要经常删除内容的文件有一些弊端,而且相对来说会浪费一些空间。  
---------------------------------------------------------------  
 
不断的填充填充,节省空间吗!一个普通网站100m空间,能放多少数据?如果数据量太大,请用数据库  
---------------------------------------------------------------  
 
to  langwan:  
别误解,我说的是用固定记录会浪费空间!  
如果留言大部分很短,你可以将1k减少为100b也行呀。  
其实这么说只是针对使用文件保存数据而言,当然最好是用数据库了(在记录数比较多时)。  
应该允许百花齐放嘛!  
---------------------------------------------------------------  
 
呵呵,不许打架。。。。。^_^。。。。。。。  
我觉得如果文件内容很多的话就用数据库。要不然为什么叫库呢。  
而且文本文件不理想。如果文件太多往往占远超过文件大小的空间(与簇有关)。10个1mb的文件绝对比100个100kb的文件占的空间小。  
讲效率就用数据库嘛。  
---------------------------------------------------------------  
 
文本数据库的效率的确不高.  除非与很好的数据结构相配合(sigh,  我还没找到很好的相关资料)  
 
用fgets对于小文件的效率可能是不高,  但是对于大文件,  用file你就会发现你浪费了大部分时间在读取不需要的东西(特别是需要的内容在前面的时候).  
 
这些函数,  都是一些时候我比你快,  另一些时候你比我快的.  不能一棒子打死.  
---------------------------------------------------------------  
 
你的那个想法有点儿类似dbase数据表的memo字段,用那个方法当然可以。但是要考虑到效率问题:即你先处理索引信息,然后再定位于实际的记录位置去读取相应的内容,也许会得不偿失。而且,php好象内置了对dbase数据表的支持,我想,如果用这种方法还不如用一个*.dbf数据表来存储数据呢!你认为呢?  
---------------------------------------------------------------  
 
fseek只是将文件读写指针进行定位,应该是调用操作系统处理文件的底层接口,并不实际读取数据。而fgets应该是从当前位置读取一定数量的内容,应该占用一定的磁盘i/o时间,而file()是将文本文件按行读取到一个数组中,这就应该是一个由编程语言提供的一个高级函数,相对来说,占用的处理时间除了磁盘i/o时间之外应该还有必须的处理程序执行所需要的时间。而实际上文件读取操作中主要的瓶颈应该是磁盘存取速度(如果不涉及到更多的后续处理过程的话。),你读取的内容越多,则存取时间就应该越长,当处理小文件(存取内容相差不大)时,应该不会感觉到有什么问题,但如果文件比较大的话,这种时间的差距应该比较明显。  
---------------------------------------------------------------  
 
同一条件下,两个函数的快慢是不一定的  :)  
客观是磁盘存储原理!  
为什么不一定?:)呵呵浪湾绕口令!  
同一条件是同一条件,但是任何状态下的同一条件不是同一条件!  
所以你应该研究出一条曲线,一条这些函数效率的曲线!  
客观是存在这样一条曲线!除非你遇到的文本数据永远沿着一条直线!  
而客观是数据的状态是曲线!  
呵呵祝你成功!如果成功了告诉我一声!  
因为浪湾从来没用过php+mysql,我的网站缴费少!:-(  如果你解决了,最大的受益者浪湾耳!  
===================  
任何状态下的同一条件不是同一条件!  
---------------------------------------------------------------  
 
现在是浪湾讲故事时间:  
曾经有个很厉害的人,他说:光是波。后来又有个很厉害的人,他说:光嘛?不是波,光是粒子。两种思想在学术界打了起来!爱因斯坦狡猾的说:“说得好,你们的研究都对,光具有“波粒二像性”!世界终于不争吵了!  
浪湾开始嚷嚷了!fseek,fgets,file,文本数据库具有多像性,哈哈!  
别吵这个了,聪明人都用!不同地方,用不同的函数!  
文本就一个地方需要好好的讨论!  
==============================  
文本数据库的效率的确不高.  除非与很好的数据结构相配合(sigh,  我还没找到很好的相关资料)  
==============================  
 
为什么找不到很好的相关资料  
==============================  
浪湾讲故事时间二:  
一天浪湾的同学来我这里玩,他问浪,你那些奇形怪状的软件,显示速度不慢呀!你怎么弄的?别的软件弄成这样速度都慢了!算法教教我吧!  
浪湾对他说:“嗨,容易的很,没有任何算法,用的最笨的办法!用长头发的脑袋算出400多个轮廓点,放到数组里。计算机这个不长头发的脑袋就好了,它不用算了!所以就快了!同学疑惑的说:那?,哎呀你那什么那,每一个不同的形状我都各自算做了一个数组,这么傻瓜的做法,能不快吗?  
===============================  
总结:针对你要做的脚本程序,设计最直接的最符合客观的数据结构,就是最快的!无法通用所有客观,让所有客观都好用的理论上不存在!  
===============================  
如果你想穿最舒服的衣服,只能找人量审定做,这个问题!太。。。。  
===============================  
通用的办法理论上不好找  
呵呵,百花齐放,不断创新!

编辑:黑鹰 [发送给好友] [打印本页] [关闭窗口] [返回顶部]
上一篇:如何截取字符串里的字符?
下一篇:关于php中var_dump()函数的概念、用途。
转载请注明来源:www.iyit.net
特别声明: 本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。

 相关文章
最新更新 热点排行 推荐新闻
我在windows  xp上安装apache2.044+ph
apache+php,怎样打开session支持??
在linux中怎么配置pdflib和php  高分!
怎么样同时解释.php和.php3的文件呀,
php 4.1.0 及以后版本使用post变量的接
我在windows  xp上安装apache2.044+ph
apache+php,怎样打开session支持??
在linux中怎么配置pdflib和php  高分!
怎么样同时解释.php和.php3的文件呀,
php 4.1.0 及以后版本使用post变量的接
apache2-win32+php的成功安装方法
我只是想在本地机上学习php ,还要安装
装了php。运行时出现在以下提示
如何安装apache2.0
怎么删除mysql???
我在windows  xp上安装apache2.044+ph
apache+php,怎样打开session支持??
如何实现注册时的确认码功能
请帮忙解决,图随机上传,不限量,定位
有没有很好方法,获得在线登陆用户名单
qq密码被盗怎么办!我教你找回密码
如何控制我的电脑只允许登录我自己的q
qq2006 beta3隆重发布 实用功能一一奉
美国微软总部相中重庆15岁网络奇才(图
百度声明称遭受有史以来最大规模黑客攻
被删除系统文件恢复全攻略
使用身份验证来禁止内部用户上网 
国内首次发现带有感染文件特征盗号病毒
06年08月31日石家庄太和 内存报价
用css控制透明图片 
exeplorer.exe错误的问题的总结、解决
三分钟让你的系统变处女:acronis tru
让你的密码成为黑客的“耻辱”
比较sql server2005和oracle 10g r2
比较sql server2005和oracle 10g r2
sql server2005的xml数据类型之基础篇
sql server服务器的“偷梁换柱”
在win2003下mysql数据库每天自动备份
win2000 apache php mysql 安装及安全
mysql账户相关
快速安装windows操作系统独家秘籍
 友情链接
设置首 页 - 版权声明 - 广告服务 - 关于我们 - 联系我们 - 友情连接
copyrights © 2004-2006 iyit.net all rights reserved.
网站合作、广告联系qq:147007642、466949678
易特网络技术 点击这里给我发消息