24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1179  |  回复: 4
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

shugq_2009

新虫 (小有名气)

[交流] 【求助】怎么从一个文件中读取其中某些行的数据

原来我编的程序是提取一个文件中所有的数据,现在因为只需要读取其中的某行到某行,可以用程序实现吗?下面是我原来编的提取一个文件中数据的部分程序,望大侠赐教
FILE *fp;
if((fp=fopen("dump40.melt","r")==NULL)
  { printf("cannot open the file";
        exit(0);
        }
char ch;
ch=fgetc(fp);
while(ch!=EOF)
{
  if(ch=='\n')  n++;
  if(n==5)
      { for(i=0;i<6;i++)
        fscanf(fp,"%lf",&(*p).d[step]);
       }
  if(n==7)
        {
         for(i=0;i<256;i++)
{
         for(j=0;j<2;j++)
         fscanf(fp,"%d",&(*p).atome[step][j]);
         for(j=0;j<3;j++)
         fscanf(fp,"%lf",&(*p).pos[step][j]);
  }
step++;
n=0;}
ch=fgetc(fp);
}
fclose(fp);
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

holmescn

金虫 (正式写手)


余泽成(金币+1):谢谢参与应助! 2010-10-26 00:27:38
shugq_2009(金币+2):谢谢 2010-10-27 23:13:00
虽然fseek可以跳过不想读的字节,但没法判断行。所以,在你的程序里稍加修改就能实现了。(没有直接的函数可以用)
CODE:
  if(ch=='\n')  n++;

这行是关键。你可以判断n的值,跳过不需要的行。如:
CODE:
if(ch=='\n') n++;
if(n

3楼2010-10-25 20:13:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 5 个回答

_l_

新虫 (初入文坛)

你的程序不是已经可以读取想要读取的行了吗?
总是需要查找待读取行的位置的
2楼2010-10-25 18:54:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

shugq_2009

新虫 (小有名气)

引用回帖:
Originally posted by _l_ at 2010-10-25 18:54:35:
你的程序不是已经可以读取想要读取的行了吗?
总是需要查找待读取行的位置的

比如我想去第5行到100行的,然后继续取102行到500行的,然后取600行到1000行的,就是在一个文件中取,而且没有周期性的规律
4楼2010-10-27 23:15:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

magic7004

金虫 (职业作家)


nono2009(金币+1):鼓励应助 2010-10-30 15:09:15
引用回帖:
Originally posted by shugq_2009 at 2010-10-27 23:15:48:

比如我想去第5行到100行的,然后继续取102行到500行的,然后取600行到1000行的,就是在一个文件中取,而且没有周期性的规律

楼主有这种需求的话,建议重新设计文件格式,使用结构化的文件存储,以便提高读写效率。
流氓不可怕,可怕的是流氓有文化,有文化又BH的流氓无敌~~!
5楼2010-10-28 20:04:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见