首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++读取文本文件解决方法

2012-06-07 
C++读取文本文件比如读取下面的txt文件,希望能够分段读取。就是中间的空横作为一个分隔的字符。即:1.你今年

C++读取文本文件
比如读取下面的txt文件,希望能够分段读取。就是中间的空横作为一个分隔的字符。
即:
1.你今年大几?
A 大一
B 大二
C 大三
D 大四
保存在一个字串符
2.你的性别是?
A 男
B 女
保存在另外一个,其他类推


//test.txt

1.你今年大几?
A 大一
B 大二
C 大三
D 大四

2.你的性别是?
A 男
B 女

3.你的学院是?
A 药学院
B 医学院
C 人文社科学院
D 外国语学院
E 其他

end

[解决办法]
[code=C/C++][/code]

#include <stdio.h> 
int main(void) 

FILE* file=fopen("text.txt","r"); 
if(file==NULL) 

printf("打开文件失败\n"); 


while(1)
{
char buf[1024]=""; 
fgets(buf,1024,file);
printf("%s",buf); 
if (feof(file))
break;
}
fclose(file);
return 0; 
}


[解决办法]
发现之前写的代码有BUG,最后一行的end没读到,另外如果文件以空行结尾会产生错误,调了半天才调好,见笑了
这下可以放心睡觉了...

C/C++ code
#include <iostream>#include <fstream>using namespace std;int main(void) {    ifstream ifs("test.txt",ios::binary);    if(!ifs) {        cout << "打开文件失败\n" << endl;    }        char *pszText[1000]={NULL};    int i=0;    long posStart=0,posEnd=0;    int size=0;    int flag=0;    while(!ifs.eof()) {        posStart=ifs.tellg();        while(!ifs.eof()) {            char temp[256]="";            ifs.getline(temp,sizeof(temp));            if(temp[0]=='\0')//遇到空行时,什么内容也不会读取temp[0]=='\0'            {                        break;            }        }        if(!ifs.eof()) {        if(!ifs.eof()) ifs.seekg(-1,ios::cur);//回退到空行之前                 posEnd=ifs.tellg();        }else {//如果已经到了文件尾,则按如下方式获取posEnd         ifs.clear();//之前没加这一句,老出错,恼死我了        ifs.seekg(0,ios::end);//        posEnd=ifs.tellg();        flag=1;//到结尾标记一下        }            size=posEnd-posStart;//整个字符的大小             ifs.seekg(posStart);//回到起始点            pszText[i]=new char[size+1];//分配空间            ifs.read(pszText[i],size);//读入                     i++;//下标后移        if(flag) break;       else ifs.seekg(posEnd+1);//再回到空行之后。            }    i=0;    while(pszText[i]) {        cout << pszText[i] << endl;//打印         i++;            }    i=0;    while(pszText[i]) {        delete[] pszText[i];//释放         i++;    }    return 0;}
[解决办法]
C/C++ code
//test.cpp#include <iostream>#include <fstream>#include <vector>#include <string>int main(){    using namespace std;    char filename[] = "test.txt";    ifstream fin;    fin.open(filename, ios_base::in);    if (!fin.is_open())    {        cerr << filename << "打开错误,程序终止。\n";        exit(EXIT_FAILURE);    }    string temp, line;    vector<string> choice;        getline(fin, temp);    while (fin && temp != "end")    {        if (temp != "")          //不是空行,把读取的字符串加起来        {            line += temp;            line += ' ';         //每行加一个空格区分不同的字段,也可以加其他字符或者不加        }        else if (line != "")     //是空行且line不空,一个line结束,存到容器中            {            choice.push_back(line);            line = "";        }        getline(fin, temp);    }    fin.close();    for (int i = 0; i < choice.size(); i++)        cout << choice[i] << endl;    return 0;} 

热点排行