C++中如何跳过一行,以及几个字符后再读入
要读入的文件是这样的:
- HTML code
1-2-3-4-5-6-7MAX=200
要求第一行直接跳过,然后第二行的“MAX=”也跳过,直接把200这个整数读出来
[解决办法]
读一行fgets,
然后用fscanf读或fgets后自己解析。
[解决办法]
如果是读取文件,是跳不过去的。文件在磁盘上就是二进制数据,没有行的概念,无法直接定位到某一行。所以只能先读取一定字节数的文件,再跳过你不要的行。比如先将全文读到一个串里面,再用getline分行读取,忽略第一行。。。
[解决办法]
[解决办法]
- 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);}