首先你要设计好数据结构把每一条记录抽离出来,要求分理出每个字段
然后分别读取要求合并的两个数据文件,可以直接在读的时候合并,也可以读完之后再合并
把合并后的数据再按原来的格式写出到目标文件即可
类似的代码设计如下:
// 每一行的数据记录信息
typedef struct _my_info
{
int nDriverId;
string strInfo18;
string strInfo19;
string strInfo20;
string strInfo21;
string strInfo22;
string strInfo23;
}MyInfo;
//存储从两个文件读入的数据
mapmapIn;
ifstream fIn;
string strLine;
string strCarId;
MyInfo oLineInfo;
fIn.open("data1.txt");
while(getline(fIn,strLine))
{
// 处理分割出每个字段,获取到车牌号strCarId和具体信息oLineInfo
// 把信息存起来
mapIn[strCarId] = oLineInfo;
}
fIn.close();
fIn.open("data2.txt");
map::iterator ite = mapIn.end();
while(getline(fIn,strLine))
{
// 处理分割出每个字段,获取到车牌号strCarId和具体信息oLineInfo
// 把已经存好的该对应记录取出来
ite = mapIn.find(strCarId);
if (ite != mapIn.end() )
{
MyInfo oLineInfo2 = ite->second;
// 把已有的信息合并到oLineInfo1中
// 合并每个字段
if( oLineInfo.strInfo18.empty() && !oLineInfo2.strInfo18.empty())
{
oLineInfo.strInfo18 = oLineInfo2.strInfo18;
}
// 依次次合并其他字段
// ...
}
// 把已经合并的信息存起来
mapIn[strCarId] = oLineInfo;
}
fIn.close();
// 经过上述操作,现在所有的信息已经存到mapIn中了,直接把该信息输出到所需的文件就可以了
ofstream fOut;
fOut.open("rst.txt", ios::out | ios::trunc);
// 写入标题
// 写入记录
ite = mapIn.begin();
while( ite != mapIn.end() )
{
// 写入一条记录
strLine = ite->first; //车牌号
strLine += " "; // 分割符之类的
strLine += ite->second->strInfo18; // 其他字段
strLine += ite->second->strInfo19; // 其他字段
// ...
strLine += "\n"; // 换行符
fOut.write(strLine);
ite++;
}
fOut.close();