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

文件处理又有麻烦了- -解决办法

2012-02-19 
文件处理又有麻烦了- -~~~~~~~~~现在我有一个input.txt的文件,内容如下第一个书柜类型:科普数量:121管理人

文件处理又有麻烦了- -~~~~~~~~~
现在我有一个input.txt的文件,内容如下

第一个书柜
类型:科普
数量:121
管理人员:李四     钱八

第二个书柜
类型:人文
数量:581
管理人员:赵五     孙六     王七

第三个书柜
类型:历史
管理人员:张三     钱八     赵五     孙六

第四个书柜
类型:地理
数量:1068
管理人员:王羲之     黑牛     达芬奇
====================================================
输出   output.txt:
第一个书柜,   科普,   121,   李四     钱八
第二个书柜,   人文,   581,   赵五     孙六     王七
第三个书柜,   历史,   0,   张三     钱八     赵五     孙六
第四个书柜,   地理,   1068,   王羲之     黑牛     达芬奇


但是今天又遇到问题了

现在我有一个input.txt的文件,内容如下

第一个书柜
类型:科普
数量:121
管理人员:李四     钱八

第二个书柜
类型:人文
数量:581
管理人员:赵五     孙六     王七

第三个书柜
类型:历史
管理人员:张三     钱八     赵五     孙六

第四个书柜
类型:地理
数   量:1068
管理人员:王羲之     黑牛     达芬奇


主要的区别在于 "数量 "那个地方有的中间多了一个空格

我想把输出的   output.txt   和上面的输出一样  

用昨天     jixingzhong(瞌睡虫·星辰)     的方法
我自己试着把程序给改成:
===========================================
#include   <fstream>
#include   <string>
#include   <iostream>
using   namespace   std;

int   main()  
{
ifstream   ifile( "input.txt ");
ofstream   ofile( "output.txt ");
string   line,   tmpa,   tmpb   ;

while   (!ifile.eof())
{
getline(ifile,   line);     //第X个书柜
ofile < <line < < ",   ";

getline(ifile,   line);     //类型
ofile < <line.substr(6) < < ",   ";     // "类型: "长度为   6

getline(ifile,   line);     //数量
tmpa   =   "数量: ";
tmpb   =   "数   量: ";
if   (line.find(tmpa)   !=   string::npos)
{
if   (line.find(tmpb)   !=   string::npos)
{
ofile < <line.substr(7) < < ",   ";

getline(ifile,   line);     //管理人员
ofile < <line.substr(10) < <endl;
}
else
{
ofile < <line.substr(6) < < ",   ";

getline(ifile,   line);     //管理人员
ofile < <line.substr(10) < <endl;
}  
}
else     //当前读取的line就是   管理人员   信息
{
ofile < <0 < < ",   ";
ofile < <line.substr(10) < <endl;
}
getline(ifile,   line);     //读取空行
}
return   0;  
}

============================================

程序没有问题,
但是如果遇见input.txt文件里面,只要 "数量 "中间有空格,就不能得到结果
我不知道怎么改了-   -~~
请各位大大帮我看看怎样修改啊

[解决办法]
if (line.find(tmpa) != string::npos)
{
if (line.find(tmpb) != string::npos)
{
...
==》
if ( (line.find(tmpa) != string::npos) | (line.find(tmpb) != string::npos) )
{
...

{}配对自己调整一下
[解决办法]
if (line.find(tmpa) != string::npos)


{
if (line.find(tmpb) != string::npos)
{

这样是 & 的关系,
实际上应该是 | 的关系
if ( (line.find(tmpa) != string::npos) | (line.find(tmpb) != string::npos) )
就可以了 ...

热点排行