C++ 将通讯录txt文本文件导入到csv表格文件中

来源:互联网 发布:白人警察枪杀黑人知乎 编辑:程序博客网 时间:2024/05/18 11:49

将通讯录文本文件导入到csv表格文件中

例如:a.txt内容为

"103 "<fx159357@qq.com>;"1111 "<420890247@qq.com>;"178864145 "<178864145@qq.com>;"276831590 "<276831590@qq.com>;"277647076 "<277647076@qq.com>;"409481776 "<409481776@qq.com>;"513972110 "<513972110@qq.com>;"924835549 "<924835549@qq.com>;"948226252 "<948226252@qq.com>;

导入到csv文件中。姓名与邮箱相对应。。


代码如下:

#include <string>

#include <fstream>
#include <sstream>
#include <iostream>

using namespace std;

const MAX=1000;

//从文件读入到string里
string readFileIntoString(char * filename)
{
ifstream ifile(filename);
//将文件读入到ostringstream对象buf中
ostringstream buf;
char ch;
while(buf&&ifile.get(ch))
buf.put(ch);
//返回与流对象buf关联的字符串
return buf.str();
}

int main()
{
char * fn="a.txt";//文件名
string str;
str=readFileIntoString(fn);
//输出所有字符
cout<<str<<'\n'<<endl;

cout<<"字符串总长度为"<<str.size()<<endl;

//输出所有字符
for(int ii=0;ii<str.size();ii++)
cout<<str[ii]<<" ";

int begin[MAX],end[MAX],firstone[MAX],firsttwo[MAX];
int countb=0,counte=0;
int i=0;

//所有引号开始位置和分号结束位置
while(i<str.size())
{
if(str[i]=='"')
begin[countb++]=i;
if(str[i]==';')
end[counte++]=i;
i++;
}
//一对引号开始与结束位置
for(int j=0;j<=counte;j++)
{
firstone[j]=begin[j*2];
firsttwo[j]=begin[j*2+1];
}

//输出开始与结束的位置
for(int kk=0;kk<counte;kk++)
cout<<firstone[kk]<<" "<<end[kk]<<"    ";

string name[MAX];//姓名
string mail[MAX];//邮箱

//赋值给数组,姓名和邮箱。
for(int k=0;k<counte;k++)
{
name[k]=str.substr(firstone[k]+1,firsttwo[k]-firstone[k]-1);
mail[k]=str.substr(firsttwo[k]+2,end[k]-firsttwo[k]-3);
cout<<name[k]<<" "<<mail[k]<<'\n';
}

//写入到test.csv文件中
    fstream input("test.csv");
    for(int m=0;m<counte;m++)//写入姓名
{
   input<<name[m]<<'\n';
}
    for(int n=0;n<counte;n++)//写入邮箱
{
   input<<mail[n]<<'\n';
}

return 0;
}