#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <assert.h>
#include <io.h>
#include <windows.h>
#include <direct.h>
#include <io.h>
#include<iomanip>
using namespace std;
int ID_SIZE=5;//根据相应的模式进行选择
enum MyEnum
{
/**********0x53,83,01,71,88,45 *********后面有空格和没有空格都行
***********2641 *********
***********AE11 ********/
ONE_MODE = 0X01,
/********0x03,02,01,71,90,0 2641 AE11 ****/
MUL_MODE = 0X02,
/*****************后续有新模式自己添加*********************/
MIS_MODE = 0x10,
};
struct DADE
{
vector<string>vctMyDateList;
};
struct MyDate
{
string strId;
DADE date;
};
/********模式二用到的数据*************/
struct MyDateTwo
{
string strID;
string strAdd;
string str1;
string str2;
};
/*************************模式一的实现方式*********************/
bool fnIsHeadLine(string str)
{
if (str.substr(0,2)!="0x") //首选确认首行是否0x开头
{
return false;
}
else
{
for (int i = 0; i < str.size(); i++)
{
if (str[i]=='\t')
{
return false;
}
}
unsigned int iPos = str.find_first_of(",");
if (str.substr(0,iPos).size()==4)
{
str = str.substr(2); //切掉0x
string strlend = ",";
unsigned int iPos =str.find(strlend);
while (iPos !=string::npos)
{
string strRase = str.substr(0,iPos);
str = str.substr(iPos+strlend.size());
iPos = str.find(strlend);
if (strRase.size()!=2)
{
return false;
}
}
return true;
}
else
{
return false;
}
}
}
string fnGetIdFromStr(string str)
{
//带0x的返回
string strResult = "";
string strNew = str.substr(2); //切除0x
string strlend = ",";
unsigned int iPos = strNew.find(strlend);
int i = 0;
while (iPos!=string::npos)
{
strResult += "0x";
strResult += strNew.substr(0,iPos);
strResult += ",";
strNew = strNew.substr(iPos+strlend.size());
iPos = strNew.find(strlend);
i++;
}
// for (int i=0; i<ID_SIZE; i++)
// {
// strResult += "0x";
// strResult += strNew.substr(i*3,2);
// if (i!=(ID_SIZE-1))
// {
// strResult += ",";
// }
// }
strResult = strResult.substr(0,strResult.size()-1);
return strResult;
}
string fnGetFirstLineDate(string str)
{
string strResult = " ";
string strNew = " ";
char LastChter = str.at(str.size()-1);
if (LastChter!='\0')
{
strNew = str.substr(0,str.size());
}
else
{
strNew = str.substr(0,str.size()-1); //去掉最后一个空格
}
int iPos = strNew.find_last_of(",");
if (iPos!=string::npos)
{
strResult =strNew.substr(iPos+1);//从逗号开始取到结尾
}
return strResult;
}
void fnReadFile(vector<MyDate> &vct,string strFilename)
{
ifstream fin(strFilename.c_str());
if (fin.bad())
{
cout<<"Error when open file!"<<endl;
return;
}
string str ="";
while (getline(fin,str))
{
if (str!="")
{
if (fnIsHeadLine(str))
{
MyDate myDate;
myDate.strId=fnGetIdFromStr(str);
myDate.date.vctMyDateList.push_back(fnGetFirstLineDate(str));
vct.push_back(myDate);
}
else
{
if (vct.size()<1)
{
continue;
}
MyDate &myDate = vct[vct.size()-1];
char LastChter = str.at(str.size()-1);
if (LastChter!='\0')
{
str = str.substr(0,str.size());
}
else
{
str = str.substr(0,str.size()-1); //去掉最后一个空格
}
myDate.date.vctMyDateList.push_back(str/*.substr(0,str.size()-1)*/); // 去掉最后的空格
}
}
}
fin.close();
return;
}
void fnWriteFile(vector<MyDate> &vct,string strFilename)
{
ofstream fout(strFilename.c_str());
if (fout.bad())
{
cout<<"Error when write file !"<<endl;
return;
}
for (unsigned int i=0;i<vct.size();i++)
{
fout<<vct[i].strId<<"\t"; //把这行的ID输出
for (unsigned int j=0;j<vct[i].date.vctMyDateList.size();j++) //这个容器数组进行遍历
{
fout<<"\""<<vct[i].date.vctMyDateList[j]<<"\""; //ID后面的字符依次输出
if (j!=(vct[i].date.vctMyDateList.size())-1)
{
fout<<","; //每输一个字符加逗号
}
}
fout<<"\n"; //一行输出完时加换行符
}
fout.close();
return;
}
#if 0
//获取当前路径下所有.txt文件命和路径名
vector<string> FindFile(string fileName, string filePath)
{
vector<string>vct;
vct.clear();
string strFileName = "";
assert(fileName != "" && filePath != "");
string exeName = fileName.substr(fileName.find_last_of('.'));
string strPath = filePath;
string filiterName = "*.*";
if ( strPath[strPath.length() - 1] != '\\')
{
strPath = strPath + "\\";
}
_finddata_t fileInfo;
long handle = _findfirst((strPath + filiterName).c_str(), &fileInfo);
if (handle == -1L)
{
cout<<"Cannot Open The Path!"<<endl;
return vct;
}
do
{
string path = fileInfo.name;
if (fileInfo.attrib & _A_SUBDIR)
{
if (strcmp(fileInfo.name, ".") != 0 && strcmp(fileInfo.name, "..") != 0)
{
FindFile(fileName, strPath + path + "\\");
}
}
else if (fileInfo.attrib & _A_ARCH && path.substr(path.find_last_of('.')) == exeName)
{
//cout<<strPath + fileInfo.name<<endl;
vct.push_back(strPath+fileInfo.name);
}
}while (_findnext(handle, &fileInfo) == 0);
_findclose(handle);
return vct;
}
#endif
//void GetAllFiles( string path, vector<string>& files)
//vector<string> FindFile(string path, string files)
//获取特定格式的文件名
#if 0
void GetAllFormatFiles( string folderPath, vector<string>& files,string fileName)
{
_finddata_t FileInfo;
string strfind = folderPath + "\\*" ;
long Handle = _findfirst(strfind.c_str(), &FileInfo);
if (Handle == -1L)
{
cerr << "can not match the folder path" << endl;
exit(-1);
}
do{
//判断是否有子目录
if (FileInfo.attrib & _A_SUBDIR)
{
if( (strcmp(FileInfo.name,".") != 0 ) &&(strcmp(FileInfo.name,"..") != 0))
{
string newPath = folderPath + "\\" + FileInfo.name;
GetAllFormatFiles(newPath,files,fileName );
}
}
else
{
//fout << folderPath << "\\" << FileInfo.name << " ";
files.push_back(folderPath + "\\" + FileInfo.name);
}
}while (_findnext(Handle, &FileInfo) == 0);
_findclose(Handle);
}
#endif
void GetAllFormatFiles( string path, vector<string>& files,string format)
{
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string p;
if((hFile = _findfirst(p.assign(path).append("\\*" /*+ format*/).c_str(),&fileinfo)) != -1)
{
do
{
if((fileinfo.attrib & _A_SUBDIR))
{
if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)
{
//files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
GetAllFormatFiles( p.assign(path).append("\\").append(fileinfo.name), files,format);
}
}
else
{
string str1 = p.assign(path).append("\\").append(fileinfo.name);
string str2 = ".txt";
if (str1.find(str2) != -1)
{
files.push_back( p.assign(path).append("\\").append(fileinfo.name));
}
//files.push_back( p.assign(fileinfo.name)); //将文件路径保存,也可以只保存文件名: p.assign(path).append("\\").append(fileinfo.name)
}
}while(_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
bool modeChoose(string str)
{
int iCtrl = 0;
if (str.substr(0,2)!="0x")
{
return false;
}
else
{
string strlend = "\t";
string strBtckUp = str;
unsigned int iPos = str.find(strlend);
while (iPos != string::npos)
{
str = str.substr(iPos+strlend.size());
iPos = str.find(strlend);
str = str.substr(0,iPos);
if (str.size()>=1)
{
for (int i = 0; i < strBtckUp.size(); i++)
{
if (strBtckUp[i]=='\t')
{
iCtrl ++ ;
}
}
if (iCtrl >= 3)
{
if (strBtckUp[strBtckUp.size()-1]=='\t')
{
return true;
}
return false;
}
else
{
return false;
}
}
else
{
return false;
}
}
return false;
}
}
int fnGetModSlc(string strFileName)
{
string strMode = "";
ifstream fin(strFileName.c_str());
if (fin.bad())
{
cout<<"Error !"<<endl;
system("pause");
exit(1);
}
getline(fin,strMode);
if (modeChoose(strMode)) //判断是否为模式二
{
return MyEnum::MUL_MODE;
}
else if (fnIsHeadLine(strMode))
{
return MyEnum::ONE_MODE;
}
else
{
return MyEnum::MIS_MODE;
}
}
string getStrNewID(string strID)
{
string NewstrID ="";
string strlend = ",";
unsigned int iPos = strID.find(strlend);
if (strID!="")
{
while (iPos != string::npos)
{
NewstrID += "0x";
NewstrID += strID.substr(0,iPos);
strID = strID.substr(iPos+strlend.size());
iPos = strID.find(strlend);
NewstrID += ",";
}
NewstrID = NewstrID.substr(0,NewstrID.size()-1);
}
return NewstrID;
}
string getStrNewAdd(string strAdd)
{
string strNewAdd ="";
strNewAdd += "\t";
strNewAdd += "\"" + strAdd + "\"";
strNewAdd += ",";
return strNewAdd;
}
string getstrRend(string strNew)
{
string strlend("\t");
unsigned int iPos = strNew.find(strlend);
string strNewLeft="";
while (iPos !=string::npos)
{
strNewLeft += "\"";
strNewLeft += strNew.substr(0,iPos);
strNew = strNew.substr(iPos+strlend.size());
iPos = strNew.find(strlend);
strNewLeft += "\",";
}
strNewLeft = strNewLeft.substr(0,strNewLeft.size()-1);
return strNewLeft;
}
/****************模式二*****************/
string fnGetIdFromTwoStr(string str)
{
vector<string> vct;
vct.clear();
string strResult = "";
string strNew = str.substr(2); //切除0x
string strIdent = "\t";
unsigned int iPos = strNew.find(strIdent);
string strID = strNew.substr(0,iPos);//获取第一个Tab前的字符串
string strAdd = strID.substr(strNew.find_last_of(",")+1); //获取上个字符串最后一个逗号之后的数据
strNew = strNew.substr(iPos+strIdent.size()); //获取第一个Tab之后的数据
strNew =strNew.substr(0,strNew.size()-1); //把最后一个Tab切掉
strID = getStrNewID(strID); //获取ID
strAdd = getStrNewAdd(strAdd); //获取ID之后的第一个数据
string strRend = getstrRend(strNew);
// iPos = strNew.find(strIdent);
// string strNewFron ="";
// string strFront = strNew.substr(0,iPos); //获取ID之后的第二个数据
// strNewFron += ",";
// strNewFron += "\"" + strFront + "\"";
// //vct.push_back(strNewFron);
//
// string strNewReen = "";
// string strRend= strNew.substr(iPos+strIdent.size()); //获取ID之后的第三个数据
// strNewReen += ",";
// strNewReen += "\"" + strRend + "\"";
// //vct.push_back(strNewReen);
string strNewLine = strID + strAdd +strRend;
return strNewLine;
}
void fnReadFileModeTwo(string strFilename)
{
vector<string> vct;
vct.clear();
ifstream fin(strFilename.c_str());
if (fin.bad())
{
cout<<"Error when open file!"<<endl;
system("psuse");
exit(1);
}
string str ="";
while (getline(fin,str))
{
if (str!="")
{
string strNewFile =fnGetIdFromTwoStr(str);
vct.push_back(strNewFile);
}
}
fin.close();
ofstream fout(strFilename.c_str());
if (fout.bad())
{
cout<<"Error when write file!"<<endl;
system("psuse");
exit(1);
}
vector<string>::iterator it;
for (it = vct.begin();it != vct.end(); it++)
{
fout<<*it<<endl;
}
fout.close();
//return vct;
}
void getFileName()
{
char buff[1000];
_getcwd(buff, 1000);
string fileName = ".txt";
vector<string>vct;
vct.clear();
GetAllFormatFiles(buff, vct,fileName);
vector<string>::iterator it;
int iCtrl = 1;
float iNumber = 0.0;
int iTote = vct.size();
for (it = vct.begin();it != vct.end();it++)
{
iNumber ++;
cout << "正在处理中,请稍等...已完成 " << setprecision(2) << fixed << (iNumber/iTote)*100 << "%" << endl;
string strFileName = *it;
string str_size = "";
ifstream fin_size(strFileName.c_str());
if (fin_size.bad())
{
return ;
}
if (getline(fin_size,str_size))
{
if (str_size!="")
{
string strEnd = ",";
unsigned int iPos = str_size.find(strEnd);
while (iPos!=string::npos)
{
str_size = str_size.substr(iPos+strEnd.size());
iPos = str_size.find(strEnd);
iCtrl++;
}
}
}
ID_SIZE = iCtrl;
int iMode = fnGetModSlc(strFileName);
/***数据存储***/
vector<MyDate> vctMyDatr;
vector<MyDateTwo> vctMyDateTwo;
vctMyDatr.clear();
switch (iMode)
{
case 1: /****模式一(5位ID)****/
/*****读取数据(包括整理数据)****/
fnReadFile(vctMyDatr,*it);
/***写入数据到文件中***/
fnWriteFile(vctMyDatr,*it);
break;
case 2: //模式二(5位ID,后面有Tab)
/*****读取数据(包括整理数据)****/
fnReadFileModeTwo(*it);
/***写入数据到文件中***/
//fnWriteFileModeTwo(vctMyDateTwo,*it);
break;
default:
ofstream fout("LoseFlie.txt",ios::app);
fout<<strFileName<<endl;
fout.close();
break;
}
}
}
void main(void)
{
getFileName();
}
#include <fstream>
#include <vector>
#include <string>
#include <map>
#include <assert.h>
#include <io.h>
#include <windows.h>
#include <direct.h>
#include <io.h>
#include<iomanip>
using namespace std;
int ID_SIZE=5;//根据相应的模式进行选择
enum MyEnum
{
/**********0x53,83,01,71,88,45 *********后面有空格和没有空格都行
***********2641 *********
***********AE11 ********/
ONE_MODE = 0X01,
/********0x03,02,01,71,90,0 2641 AE11 ****/
MUL_MODE = 0X02,
/*****************后续有新模式自己添加*********************/
MIS_MODE = 0x10,
};
struct DADE
{
vector<string>vctMyDateList;
};
struct MyDate
{
string strId;
DADE date;
};
/********模式二用到的数据*************/
struct MyDateTwo
{
string strID;
string strAdd;
string str1;
string str2;
};
/*************************模式一的实现方式*********************/
bool fnIsHeadLine(string str)
{
if (str.substr(0,2)!="0x") //首选确认首行是否0x开头
{
return false;
}
else
{
for (int i = 0; i < str.size(); i++)
{
if (str[i]=='\t')
{
return false;
}
}
unsigned int iPos = str.find_first_of(",");
if (str.substr(0,iPos).size()==4)
{
str = str.substr(2); //切掉0x
string strlend = ",";
unsigned int iPos =str.find(strlend);
while (iPos !=string::npos)
{
string strRase = str.substr(0,iPos);
str = str.substr(iPos+strlend.size());
iPos = str.find(strlend);
if (strRase.size()!=2)
{
return false;
}
}
return true;
}
else
{
return false;
}
}
}
string fnGetIdFromStr(string str)
{
//带0x的返回
string strResult = "";
string strNew = str.substr(2); //切除0x
string strlend = ",";
unsigned int iPos = strNew.find(strlend);
int i = 0;
while (iPos!=string::npos)
{
strResult += "0x";
strResult += strNew.substr(0,iPos);
strResult += ",";
strNew = strNew.substr(iPos+strlend.size());
iPos = strNew.find(strlend);
i++;
}
// for (int i=0; i<ID_SIZE; i++)
// {
// strResult += "0x";
// strResult += strNew.substr(i*3,2);
// if (i!=(ID_SIZE-1))
// {
// strResult += ",";
// }
// }
strResult = strResult.substr(0,strResult.size()-1);
return strResult;
}
string fnGetFirstLineDate(string str)
{
string strResult = " ";
string strNew = " ";
char LastChter = str.at(str.size()-1);
if (LastChter!='\0')
{
strNew = str.substr(0,str.size());
}
else
{
strNew = str.substr(0,str.size()-1); //去掉最后一个空格
}
int iPos = strNew.find_last_of(",");
if (iPos!=string::npos)
{
strResult =strNew.substr(iPos+1);//从逗号开始取到结尾
}
return strResult;
}
void fnReadFile(vector<MyDate> &vct,string strFilename)
{
ifstream fin(strFilename.c_str());
if (fin.bad())
{
cout<<"Error when open file!"<<endl;
return;
}
string str ="";
while (getline(fin,str))
{
if (str!="")
{
if (fnIsHeadLine(str))
{
MyDate myDate;
myDate.strId=fnGetIdFromStr(str);
myDate.date.vctMyDateList.push_back(fnGetFirstLineDate(str));
vct.push_back(myDate);
}
else
{
if (vct.size()<1)
{
continue;
}
MyDate &myDate = vct[vct.size()-1];
char LastChter = str.at(str.size()-1);
if (LastChter!='\0')
{
str = str.substr(0,str.size());
}
else
{
str = str.substr(0,str.size()-1); //去掉最后一个空格
}
myDate.date.vctMyDateList.push_back(str/*.substr(0,str.size()-1)*/); // 去掉最后的空格
}
}
}
fin.close();
return;
}
void fnWriteFile(vector<MyDate> &vct,string strFilename)
{
ofstream fout(strFilename.c_str());
if (fout.bad())
{
cout<<"Error when write file !"<<endl;
return;
}
for (unsigned int i=0;i<vct.size();i++)
{
fout<<vct[i].strId<<"\t"; //把这行的ID输出
for (unsigned int j=0;j<vct[i].date.vctMyDateList.size();j++) //这个容器数组进行遍历
{
fout<<"\""<<vct[i].date.vctMyDateList[j]<<"\""; //ID后面的字符依次输出
if (j!=(vct[i].date.vctMyDateList.size())-1)
{
fout<<","; //每输一个字符加逗号
}
}
fout<<"\n"; //一行输出完时加换行符
}
fout.close();
return;
}
#if 0
//获取当前路径下所有.txt文件命和路径名
vector<string> FindFile(string fileName, string filePath)
{
vector<string>vct;
vct.clear();
string strFileName = "";
assert(fileName != "" && filePath != "");
string exeName = fileName.substr(fileName.find_last_of('.'));
string strPath = filePath;
string filiterName = "*.*";
if ( strPath[strPath.length() - 1] != '\\')
{
strPath = strPath + "\\";
}
_finddata_t fileInfo;
long handle = _findfirst((strPath + filiterName).c_str(), &fileInfo);
if (handle == -1L)
{
cout<<"Cannot Open The Path!"<<endl;
return vct;
}
do
{
string path = fileInfo.name;
if (fileInfo.attrib & _A_SUBDIR)
{
if (strcmp(fileInfo.name, ".") != 0 && strcmp(fileInfo.name, "..") != 0)
{
FindFile(fileName, strPath + path + "\\");
}
}
else if (fileInfo.attrib & _A_ARCH && path.substr(path.find_last_of('.')) == exeName)
{
//cout<<strPath + fileInfo.name<<endl;
vct.push_back(strPath+fileInfo.name);
}
}while (_findnext(handle, &fileInfo) == 0);
_findclose(handle);
return vct;
}
#endif
//void GetAllFiles( string path, vector<string>& files)
//vector<string> FindFile(string path, string files)
//获取特定格式的文件名
#if 0
void GetAllFormatFiles( string folderPath, vector<string>& files,string fileName)
{
_finddata_t FileInfo;
string strfind = folderPath + "\\*" ;
long Handle = _findfirst(strfind.c_str(), &FileInfo);
if (Handle == -1L)
{
cerr << "can not match the folder path" << endl;
exit(-1);
}
do{
//判断是否有子目录
if (FileInfo.attrib & _A_SUBDIR)
{
if( (strcmp(FileInfo.name,".") != 0 ) &&(strcmp(FileInfo.name,"..") != 0))
{
string newPath = folderPath + "\\" + FileInfo.name;
GetAllFormatFiles(newPath,files,fileName );
}
}
else
{
//fout << folderPath << "\\" << FileInfo.name << " ";
files.push_back(folderPath + "\\" + FileInfo.name);
}
}while (_findnext(Handle, &FileInfo) == 0);
_findclose(Handle);
}
#endif
void GetAllFormatFiles( string path, vector<string>& files,string format)
{
//文件句柄
long hFile = 0;
//文件信息
struct _finddata_t fileinfo;
string p;
if((hFile = _findfirst(p.assign(path).append("\\*" /*+ format*/).c_str(),&fileinfo)) != -1)
{
do
{
if((fileinfo.attrib & _A_SUBDIR))
{
if(strcmp(fileinfo.name,".") != 0 && strcmp(fileinfo.name,"..") != 0)
{
//files.push_back(p.assign(path).append("\\").append(fileinfo.name) );
GetAllFormatFiles( p.assign(path).append("\\").append(fileinfo.name), files,format);
}
}
else
{
string str1 = p.assign(path).append("\\").append(fileinfo.name);
string str2 = ".txt";
if (str1.find(str2) != -1)
{
files.push_back( p.assign(path).append("\\").append(fileinfo.name));
}
//files.push_back( p.assign(fileinfo.name)); //将文件路径保存,也可以只保存文件名: p.assign(path).append("\\").append(fileinfo.name)
}
}while(_findnext(hFile, &fileinfo) == 0);
_findclose(hFile);
}
}
bool modeChoose(string str)
{
int iCtrl = 0;
if (str.substr(0,2)!="0x")
{
return false;
}
else
{
string strlend = "\t";
string strBtckUp = str;
unsigned int iPos = str.find(strlend);
while (iPos != string::npos)
{
str = str.substr(iPos+strlend.size());
iPos = str.find(strlend);
str = str.substr(0,iPos);
if (str.size()>=1)
{
for (int i = 0; i < strBtckUp.size(); i++)
{
if (strBtckUp[i]=='\t')
{
iCtrl ++ ;
}
}
if (iCtrl >= 3)
{
if (strBtckUp[strBtckUp.size()-1]=='\t')
{
return true;
}
return false;
}
else
{
return false;
}
}
else
{
return false;
}
}
return false;
}
}
int fnGetModSlc(string strFileName)
{
string strMode = "";
ifstream fin(strFileName.c_str());
if (fin.bad())
{
cout<<"Error !"<<endl;
system("pause");
exit(1);
}
getline(fin,strMode);
if (modeChoose(strMode)) //判断是否为模式二
{
return MyEnum::MUL_MODE;
}
else if (fnIsHeadLine(strMode))
{
return MyEnum::ONE_MODE;
}
else
{
return MyEnum::MIS_MODE;
}
}
string getStrNewID(string strID)
{
string NewstrID ="";
string strlend = ",";
unsigned int iPos = strID.find(strlend);
if (strID!="")
{
while (iPos != string::npos)
{
NewstrID += "0x";
NewstrID += strID.substr(0,iPos);
strID = strID.substr(iPos+strlend.size());
iPos = strID.find(strlend);
NewstrID += ",";
}
NewstrID = NewstrID.substr(0,NewstrID.size()-1);
}
return NewstrID;
}
string getStrNewAdd(string strAdd)
{
string strNewAdd ="";
strNewAdd += "\t";
strNewAdd += "\"" + strAdd + "\"";
strNewAdd += ",";
return strNewAdd;
}
string getstrRend(string strNew)
{
string strlend("\t");
unsigned int iPos = strNew.find(strlend);
string strNewLeft="";
while (iPos !=string::npos)
{
strNewLeft += "\"";
strNewLeft += strNew.substr(0,iPos);
strNew = strNew.substr(iPos+strlend.size());
iPos = strNew.find(strlend);
strNewLeft += "\",";
}
strNewLeft = strNewLeft.substr(0,strNewLeft.size()-1);
return strNewLeft;
}
/****************模式二*****************/
string fnGetIdFromTwoStr(string str)
{
vector<string> vct;
vct.clear();
string strResult = "";
string strNew = str.substr(2); //切除0x
string strIdent = "\t";
unsigned int iPos = strNew.find(strIdent);
string strID = strNew.substr(0,iPos);//获取第一个Tab前的字符串
string strAdd = strID.substr(strNew.find_last_of(",")+1); //获取上个字符串最后一个逗号之后的数据
strNew = strNew.substr(iPos+strIdent.size()); //获取第一个Tab之后的数据
strNew =strNew.substr(0,strNew.size()-1); //把最后一个Tab切掉
strID = getStrNewID(strID); //获取ID
strAdd = getStrNewAdd(strAdd); //获取ID之后的第一个数据
string strRend = getstrRend(strNew);
// iPos = strNew.find(strIdent);
// string strNewFron ="";
// string strFront = strNew.substr(0,iPos); //获取ID之后的第二个数据
// strNewFron += ",";
// strNewFron += "\"" + strFront + "\"";
// //vct.push_back(strNewFron);
//
// string strNewReen = "";
// string strRend= strNew.substr(iPos+strIdent.size()); //获取ID之后的第三个数据
// strNewReen += ",";
// strNewReen += "\"" + strRend + "\"";
// //vct.push_back(strNewReen);
string strNewLine = strID + strAdd +strRend;
return strNewLine;
}
void fnReadFileModeTwo(string strFilename)
{
vector<string> vct;
vct.clear();
ifstream fin(strFilename.c_str());
if (fin.bad())
{
cout<<"Error when open file!"<<endl;
system("psuse");
exit(1);
}
string str ="";
while (getline(fin,str))
{
if (str!="")
{
string strNewFile =fnGetIdFromTwoStr(str);
vct.push_back(strNewFile);
}
}
fin.close();
ofstream fout(strFilename.c_str());
if (fout.bad())
{
cout<<"Error when write file!"<<endl;
system("psuse");
exit(1);
}
vector<string>::iterator it;
for (it = vct.begin();it != vct.end(); it++)
{
fout<<*it<<endl;
}
fout.close();
//return vct;
}
void getFileName()
{
char buff[1000];
_getcwd(buff, 1000);
string fileName = ".txt";
vector<string>vct;
vct.clear();
GetAllFormatFiles(buff, vct,fileName);
vector<string>::iterator it;
int iCtrl = 1;
float iNumber = 0.0;
int iTote = vct.size();
for (it = vct.begin();it != vct.end();it++)
{
iNumber ++;
cout << "正在处理中,请稍等...已完成 " << setprecision(2) << fixed << (iNumber/iTote)*100 << "%" << endl;
string strFileName = *it;
string str_size = "";
ifstream fin_size(strFileName.c_str());
if (fin_size.bad())
{
return ;
}
if (getline(fin_size,str_size))
{
if (str_size!="")
{
string strEnd = ",";
unsigned int iPos = str_size.find(strEnd);
while (iPos!=string::npos)
{
str_size = str_size.substr(iPos+strEnd.size());
iPos = str_size.find(strEnd);
iCtrl++;
}
}
}
ID_SIZE = iCtrl;
int iMode = fnGetModSlc(strFileName);
/***数据存储***/
vector<MyDate> vctMyDatr;
vector<MyDateTwo> vctMyDateTwo;
vctMyDatr.clear();
switch (iMode)
{
case 1: /****模式一(5位ID)****/
/*****读取数据(包括整理数据)****/
fnReadFile(vctMyDatr,*it);
/***写入数据到文件中***/
fnWriteFile(vctMyDatr,*it);
break;
case 2: //模式二(5位ID,后面有Tab)
/*****读取数据(包括整理数据)****/
fnReadFileModeTwo(*it);
/***写入数据到文件中***/
//fnWriteFileModeTwo(vctMyDateTwo,*it);
break;
default:
ofstream fout("LoseFlie.txt",ios::app);
fout<<strFileName<<endl;
fout.close();
break;
}
}
}
void main(void)
{
getFileName();
}