读书人

C++中怎么跳过一行以及几个字符后再

发布时间: 2012-03-05 11:54:02 作者: rapoo

C++中如何跳过一行,以及几个字符后再读入
要读入的文件是这样的:

HTML code
1-2-3-4-5-6-7MAX=200


要求第一行直接跳过,然后第二行的“MAX=”也跳过,直接把200这个整数读出来

[解决办法]
读一行fgets,
然后用fscanf读或fgets后自己解析。
[解决办法]
如果是读取文件,是跳不过去的。文件在磁盘上就是二进制数据,没有行的概念,无法直接定位到某一行。所以只能先读取一定字节数的文件,再跳过你不要的行。比如先将全文读到一个串里面,再用getline分行读取,忽略第一行。。。
[解决办法]
探讨
读一行fgets,
然后用fscanf读或fgets后自己解析。

[解决办法]
C/C++ code
    ifstream fin("data.txt");      string s;      while( getline(fin,s) )    {            if ( strstr(s, "MAX=") )        {                      }    }
[解决办法]
可以一行行的读 然后在取你要的字节~ 不能直接跳到你说的位置
[解决办法]
C/C++ code
    ifstream fin("data.txt");      string s;      while( getline(fin,s) )//逐行读取到s中去    {            if ( strstr(s, "MAX=") )        {             string b = s.substr(4,strlen(s)+1);         }    }
[解决办法]
C/C++ code
FILE *f;int MAXV;f=fopen(...,"rb");fseek(f,19,SEEK_SET);fscanf("%d",&MAXV);fclose(f);//1-2-3-4-5-6-7(连行尾的'\r\n'共15个字节)//MAX=200(MAX=共4字节)//所以fseek跳到第15+4==19字节
[解决办法]
上帖中代码
fscanf("%d",&MAXV);
应改为
fscanf(f,"%d",&MAXV);

[解决办法]


C/C++ code
    char buf[50]={0};    int num;    FILE *fp=fopen("test.txt","r");    if(fp)    {        while(1)        {            memset(buf,0,50);            if(!fgets(buf,50,fp))                break;            if(strstr(buf,"-"))                continue;            sscanf(buf,"%*[^=]=%d",&num);        }        fclose(fp);    }    printf("%d",num);    return 0;
[解决办法]
fin.getline(s);
没这种用法,参数个数不匹配
[解决办法]
楼主可以都读,然后判断是否包含MAX=,如果是,然后取该行的后几个字符,或者去掉MAX=
[解决办法]
C/C++ code
#include<iostream>#include<fstream>#include<cstring>using namespace std;using std::cout;int main(void){    ifstream fin("text");      string s;      char c[20];    char *p=0;    while( getline(fin,s) )    {            p=strcpy(c,s.c_str());    }    string sentence("MAX=");    for(string::size_type i=0;i!=sentence.size();p++,i++){}    cout<<p;    return 0;}
[解决办法]
预留一块足够的内存
fgets读入,不处理
fseek(fp,4,SEEK_CUR);
最后 fscanf读取整数
[解决办法]
引用:
fgetc直到读出'\n'(当然如果先读到EOF就异常退出)
再fseek(fp,4,SEEK_CUR);
最后 fscanf读取整数

------解决方案--------------------


摒弃fstream;使用FILE *!

C/C++ code
//读取data.txt中能读取的所有整数#include <stdio.h>int n,r;int d;FILE *f;void main() {    f=fopen("data.txt","r");    if (NULL==f) {printf("Can not open file data.txt!\n");return;}    n=0;    while (1) {        r=fscanf(f,"%d",&d);        if (1==r) {            n++;            printf("[%d]==%d\n",n,d);        } else if (0==r) {            fgetc(f);        } else break;    }    fclose(f);} 

读书人网 >C++

热点推荐