📄 cmaster.pc
字号:
//没有测试
if((m_strTextName.Find("err")!=-1)||(m_strTextName.Find("ERR")!=-1))
{
m_nReturnValue=DeleteRecord();
if(m_nReturnValue!=0) {
m_filemanage->CloseFile();
return(m_nReturnValue);
}
}
else if(strcasecmp(m_pGetOneNode->strCheckRepeatRecord,"ON")==0)
{
time(&tt);
printf("\ttime1%s\n",ctime(&tt));
m_nReturnValue=CheckFileDeal();
if(m_nReturnValue!=0) {
m_filemanage->CloseFile();
m_Check->CheckFile(m_strTextName);
return(m_nReturnValue);
}
time(&tt);
printf("\ttime6%s\n",ctime(&tt));
}
else {
m_nReturnValue=FileDeal();
if(m_nReturnValue<0) {
m_filemanage->CloseFile();
return(m_nReturnValue);
}
}
return(0);
}
/************************************************************
函数:CheckFileDeal
功能:对文件中记录添加ISDN号,文件详单记录去重,添加日志
记录,写文本
参数:无
返回值:成功 大于或等于0 失败小于0
************************************************************/
int CMaster::CheckFileDeal()
{
CProcessFile m_ProcFile; //定义文本处理的对象
CStringEx strImsiAndIsdn;
CStringEx strTmpString;
int nHeadID; //是否具有头记录的标志
int nTailID; //是否具有尾记录的标志
int nLineNumber; //详单记录号,用于去重
int nInsert; //是否插入数据库的标识
int nMultNumber; //每次处理最大行数记录的倍数
m_nLine=nHeadID=nTailID=m_nRecordNumber=nLineNumber=nMultNumber=0;
m_lRecordLength=atol(m_pGetOneNode->strRecordLength);
m_lFileSize=m_filemanage->GetFileSize();
// 判断文件在日志库表是否已经存在
m_nErrFileID=0;
m_nReturnValue=m_Oracle->FileLogRecord(m_pGetOneNode->strLogTable,
m_strTextName);
if(m_nReturnValue==1) {
m_filemanage->CloseFile();
pBakDir=m_pGetOneNode->dir_link;
// 文本挪移
while(pBakDir->dlink!=NULL) {
// nMove等于0,表示文件通过cp方式到另外一个目录
m_nMove=1;
if(pBakDir->dlink->dlink==NULL) {
m_nMove=1;
}
m_strTmpString.Format("%s/%s",m_pGetOneNode->strTxtDir,
m_strTextName.GetBuffer());
m_strDestDir.Format("%s",pBakDir->strBackUpDir);
m_nReturnValue=m_filemanage->BackUpFile(m_strTmpString,
m_strDestDir,m_nMove);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
pBakDir=pBakDir->dlink;
}
// 表示文件通过mv方式到另外一个目录
m_strTmpString.Format("%s",m_pGetOneNode->strErrorDir);
m_strDestDir.Format("%s",pBakDir->strBackUpDir);
m_nReturnValue=m_Check->BackUpFile(m_strDestDir,m_strTmpString,
m_strTextName);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
else {
// 挪文件成功,更新记录的状态标志
m_nReturnValue=m_Oracle->UpdateLog(m_pGetOneNode->strLogTable,
m_strTextName,m_nErrFileID);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
}
return(0);
}
else if(m_nReturnValue==2) {
m_filemanage->CloseFile();
return(0);
}
else if(m_nReturnValue<0) {
return(m_nReturnValue);
}
else {
time(&tt);
printf("\ttime2%s\n",ctime(&tt));
m_nReturnValue=m_Check->CheckFile(m_strTextName);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
pTailRecord=m_pGetOneNode->tail_link;
while(1) {
// 从文件中获取一行记录
m_nReturnValue=m_filemanage->FetchOneRow(m_strTmpOneRow);
if(m_nReturnValue==0) {
time(&tt);
printf("\ttime3%s\n",ctime(&tt));
/**/
// 记录去重,入库
if(nLineNumber!=0) {
m_strTableName.Format("%s",m_pGetOneNode->strRecordTable);
m_Check->Initialize(m_strTableName,m_strTextName,nHeadID);
nInsert=1;
m_strTmpOneRow.Empty();
time(&tt);
printf("\ttime4%s\n",ctime(&tt));
m_nReturnValue=m_Check->StoreRecord(m_strTmpOneRow,
nInsert,nLineNumber,nMultNumber);
if(m_nReturnValue!=0) {
return(m_nReturnValue);
}
time(&tt);
printf("\ttime5%s\n",ctime(&tt));
nLineNumber=0;
}
m_strTableName.Format("%s",m_pGetOneNode->strLogTable);
m_strRecordFormat.Format("%s",pTailRecord->strTailRecord);
// 添加一行日志记录
m_ProcFile.Initialize(m_strTmpOneRow,m_strTableName,
m_strRecordFormat,m_strTextName);
m_nTailNumber=nTailID;
m_nCommit=1;
m_nReturnValue=m_ProcFile.AddRecord(m_lFileSize,
m_strYear_Mon,m_nCommit,m_nRecordNumber,
m_nLine,m_nTailNumber);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
/**/
m_filemanage->CloseFile();
pBakDir=m_pGetOneNode->dir_link;
// 文本挪移
while(pBakDir->dlink!=NULL) {
// nMove等于0,表示文件通过cp方式到另外一个目录
m_nMove=0;
if(pBakDir->dlink->dlink==NULL) {
m_nMove=1;
}
m_strTmpString.Format("%s/%s",m_pGetOneNode->strTxtDir,
m_strTextName.GetBuffer());
m_strDestDir.Format("%s",pBakDir->strBackUpDir);
m_nReturnValue=m_filemanage->BackUpFile(m_strTmpString,
m_strDestDir,m_nMove);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
pBakDir=pBakDir->dlink;
}
// 表示文件通过mv方式到另外一个目录
m_strTmpString.Format("%s",m_pGetOneNode->strErrorDir);
m_strDestDir.Format("%s",pBakDir->strBackUpDir);
m_nReturnValue=m_Check->BackUpFile(m_strDestDir,
m_strTmpString,m_strTextName);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
else {
// 挪文件成功,更新记录的状态标志
m_nReturnValue=m_Oracle->UpdateLog(m_pGetOneNode->strLogTable,
m_strTextName,m_nErrFileID);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
}
break;
}
else if(m_nReturnValue<0) {
return(m_nReturnValue);
}
else {
m_strOneRow=m_strTmpOneRow+m_strChangedTailID;
// 根据头记录的条数,区分记录是否为头记录
m_nLine++;
m_strRecordID.Format("%s",m_pGetOneNode->strHeadRecordType);
nHeadID=atoi(m_strRecordID.GetBuffer());
if((nHeadID-m_nLine)>=0) {
continue;
}
else {
// 区分记录是否为尾记录
m_strRecordID.Format("%s",m_pGetOneNode->strTailRecordType);
m_ProcFile.Initialize(m_strOneRow,m_strTableName,
m_strRecordID,m_strTextName);
m_nReturnValue=m_ProcFile.RecordType();
if(m_nReturnValue==0) {
time(&tt);
printf("\ttime5%s\n",ctime(&tt));
// 记录去重,入库
if(nLineNumber!=0) {
m_strTableName.Format("%s",m_pGetOneNode->strRecordTable);
m_Check->Initialize(m_strTableName,m_strTextName,nHeadID);
nInsert=1;
m_strTmpOneRow.Empty();
m_nReturnValue=m_Check->StoreRecord(m_strTmpOneRow,
nInsert,nLineNumber,nMultNumber);
if(m_nReturnValue!=0) {
return(m_nReturnValue);
}
nLineNumber=0;
}
nTailID++;
m_strTableName.Format("%s",m_pGetOneNode->strLogTable);
m_strRecordFormat.Format("%s",pTailRecord->strTailRecord);
// 添加一行日志记录
m_nCommit=0;
m_ProcFile.Initialize(m_strOneRow,m_strTableName,
m_strRecordFormat,m_strTextName);
m_nTailNumber=nTailID;
if(pTailRecord->rlink==NULL) {
m_nCommit=1;
m_nReturnValue=m_ProcFile.AddRecord(m_lFileSize,
m_strYear_Mon,m_nCommit,m_nRecordNumber,
m_nLine,m_nTailNumber);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
}
else {
m_nReturnValue=m_ProcFile.AddRecord(m_lFileSize,
m_strYear_Mon,m_nCommit,m_nRecordNumber,
m_nLine,m_nTailNumber);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
pTailRecord=pTailRecord->rlink;
}
}
else {
m_nRecordNumber++;
nLineNumber++;
if(strcasecmp(m_pGetOneNode->strIMSItoISDN,"ON")==0) {
strImsiAndIsdn.Format("%s",m_pGetOneNode->strIMSI_ISDN);
m_nReturnValue=m_Check->ImsiTOIsdn(m_strOneRow,
strImsiAndIsdn,strTmpString);
if(m_nReturnValue!=0) {
return(m_nReturnValue);
}
m_strOneRow=strTmpString;
}
m_strRecordFormat.Format("%s",m_pGetOneNode->strRecordBody);
m_nReturnValue=m_Check->SplitRecord(m_strOneRow,
m_strRecordFormat,nLineNumber);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
if(nLineNumber == RECORDLINE) {
m_strTableName.Format("%s",m_pGetOneNode->strRecordTable);
m_Check->Initialize(m_strTableName,
m_strTextName,nHeadID);
nInsert=1;
m_nReturnValue=m_Check->StoreRecord(m_strOneRow,
nInsert,nLineNumber,nMultNumber);
if(m_nReturnValue!=0) {
return(m_nReturnValue);
}
nMultNumber++;
nLineNumber=0;
continue;
}
nInsert=0;
m_Check->StoreRecord(m_strOneRow,nInsert,
nLineNumber,nMultNumber);
}
}
}
}
return(0);
}
}
/************************************************************
函数:FileDeal
功能:处理无须去重的文本
参数:无
返回值:成功 大于或等于0 失败小于0
************************************************************/
int CMaster::FileDeal()
{
CProcessFile m_ProcFile; //定义文本处理的对象
int nHeadID; //是否具有头记录的标志
int nTailID; //是否具有尾记录的标志
m_nLine=nHeadID=nTailID=m_nRecordNumber=m_nErrFileID=0;
m_lRecordLength=atol(m_pGetOneNode->strRecordLength);
m_lFileSize=m_filemanage->GetFileSize();
/************************************
if(m_lRecordLength!=0) {
m_nLine=m_lFileSize/m_lRecordLength;
}
**************************************/
// 判断文件在日志库表是否已经存在
m_nReturnValue=m_Oracle->FileLogRecord(m_pGetOneNode->strLogTable,
m_strTextName);
if(m_nReturnValue==1) {
m_filemanage->CloseFile();
// 备份文本
pBakDir=m_pGetOneNode->dir_link;
while(pBakDir->dlink!=NULL) {
// nMove等于0,表示文件通过cp方式到另外一个目录
m_nMove=0;
m_strTmpString.Format("%s/%s",m_pGetOneNode->strTxtDir,
m_strTextName.GetBuffer());
m_strDestDir.Format("%s",pBakDir->strBackUpDir);
m_nReturnValue=m_filemanage->BackUpFile(m_strTmpString,
m_strDestDir,m_nMove);
if(m_nReturnValue<0)
{
return(m_nReturnValue);
}
pBakDir=pBakDir->dlink;
}
// nMove等于1,表示文件通过mv方式到另外一个目录
m_nMove=1;
m_strTmpString.Format("%s/%s",m_pGetOneNode->strTxtDir,
m_strTextName.GetBuffer());
m_strDestDir.Format("%s",pBakDir->strBackUpDir);
pBakDir=pBakDir->dlink;
m_nReturnValue=m_filemanage->BackUpFile(m_strTmpString,
m_strDestDir,m_nMove);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
else {
// 挪文件成功,更新记录的状态标志
m_nReturnValue=m_Oracle->UpdateLog(m_pGetOneNode->strLogTable,
m_strTextName,m_nErrFileID);
if(m_nReturnValue<0) {
return(m_nReturnValue);
}
}
return(0);
}
else if(m_nReturnValue==2) {
m_filemanage->CloseFile();
return(0);
}
else if(m_nReturnValue<0) {
m_filemanage->CloseFile();
return(m_nReturnValue);
}
else {
pTailRecord=m_pGetOneNode->tail_link;
while(1) {
// 从文件中获取一行记录
m_nReturnValue=m_filemanage->FetchOneRow(m_strOneRow);
if(m_nReturnValue==0) {
if(nTailID == 0) {
m_strOneRow.Empty();
m_strTableName.Format("%s",m_pGetOneNode->strLogTable);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -