声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1390|回复: 4

[求助]请教文件读写问题,谢谢先

[复制链接]
发表于 2006-3-26 19:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
一个数据文件,现在想用fread进行读写,文件内是很多数据,行与行之间是回车分开的,现在想读完一行之后能够把文件指针重新指向这一行,也就是再读一次该行,试过用fseek(fid,-读出来的该行数据长度,0),想把指针重新移回该行起始处,但实际上指针移动的不对,请问如何才能实现?谢谢,请大家指教
回复
分享到:

使用道具 举报

发表于 2006-3-27 08:13 | 显示全部楼层

回复:(digistar)[求助]请教文件读写问题,谢谢先

fseek用错了<BR><BR>fseek(fid,-读出来的该行数据长度,0)<BR>改成<BR>fseek(fid,-读出来的该行数据长度,'cof')
 楼主| 发表于 2006-4-3 15:07 | 显示全部楼层
首先谢谢happy教授,可现在的问题是这样:数据文件本身可能是数字类型,现在用fgets读每一行出来,将数字按照字符串读出来后,长度就发生了变化,所以不管用fseek(fid,-读出来的该行数据长度,0),还是fseek(fid,-读出来的该行数据长度,'cof'),文件指针都不能正确返回到该行的起始处,往往可能返回到了该行的中间某处。<BR>我的目的就是希望每次能够读取文件的一行数据,进行判断,如果符合某个条件的话,需要将该行重新读一次,请问还有什么好的解决方法吗?谢谢<BR>
发表于 2006-4-3 15:27 | 显示全部楼层

回复:(digistar)首先谢谢happy教授,可现在的问题是...

<DIV class=quote><B>以下是引用<I>digistar</I>在2006-4-3 15:07:54的发言:</B><BR>首先谢谢happy教授,可现在的问题是这样:数据文件本身可能是数字类型,现在用fgets读每一行出来,将数字按照字符串读出来后,<FONT color=#ff0000>长度就发生了变化</FONT>,所以不管用fseek(fid,-读出来的该行数据长度,0),还是fseek(fid,-读出来的该行数据长度,'cof'),文件指针都不能正确返回到该行的起始处,往往可能返回到了该行的中间某处。<BR>我的目的就是希望每次能够读取文件的一行数据,进行判断,如果符合某个条件的话,需要将该行重新读一次,请问还有什么好的解决方法吗?谢谢<BR></DIV>
<P>红色标记的这句不是很理解<BR><BR>最笨的办法就是把整个文件读进来,然后判断<BR>不满足条件的[]掉就行了</P>
 楼主| 发表于 2006-4-3 17:11 | 显示全部楼层
谢谢happy教授,主要是数据文件很大,全部读进来的话操作起来会很慢,红色标记的那句话是说:当读完一行后,利用该行的数据长度,想用fseek将文件指针再返回到该行起始处,但发现利用fseek(fid,-读出来的该行数据长度,'cof')操作后,再用fgets读出的数据并不是该行的全部数据,所以指针可能是回到了该行中间某处而不是起始处。<BR>还尝试如下操作:<BR>f1=ftell(fid);<BR>data=fgets(fid);<BR>f2=ftell(fid);<BR>fseek(fid,-(f2-f1),'cof');<BR>data2=fgets(fid);<BR>但是发现data和data2也不相同。<BR>以前的操作是:<BR>data=fgets(fid);<BR>fseek(fid,-length(data),'cof');<BR>data2=fgets(fid);<BR>但是data和data2也不相同。<BR>请指教,谢谢
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-27 05:49 , Processed in 0.056235 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表