//找到第一个中文字符串字符的位置
int FindDBCS(CString strSrc)
{
int iPos = -1;
for(int i = 0 ; i < strSrc.GetLength(); i++)
{
if (IsDBCSLeadByte(strSrc.GetAt(i)))
{
iPos = i;
break;
}
}
return iPos;
}
//找出.cpp文件中非注释的中文字符串
void CDealFileDlg::OnBUTTONDeal()
{
BOOL bDoubleSlash = FALSE;//双斜杠"//"
BOOL bSlashAsterisk = FALSE;//斜杠+星号"/*"
// TODO: Add your control notification handler code here
//将文件file1中的对话框控顺序输出
CString csFilePathIn; //= _T("D://1.bin");
CString csFilePathOut; //= _T("D://2.bin");
GetDlgItem(IDC_EDIT_File_in)->GetWindowText(csFilePathIn);
GetDlgItem(IDC_EDIT_File_out)->GetWindowText(csFilePathOut);
CStdioFile fileIn;
CStdioFile fileOut;
if(!fileIn.Open(csFilePathIn,CFile::modeRead))
{
AfxMessageBox(csFilePathIn + _T("open error"));
return;
}
if(!fileOut.Open(csFilePathOut,CFile::modeWrite|CFile::modeCreate))
{
AfxMessageBox(csFilePathOut + _T("open error"));
return;
}
//
CString csLineSrc;
BOOL bBeginEnd = FALSE;//查找--开始
//找到--结束
CString csBegin;
//CString csEnd;
//int nCount = 0;
BOOL bOutExsit = FALSE;//
int nLineCount = 0;
CString csLineOut;//保存原始行
while(fileIn.ReadString(csLineSrc))
{
nLineCount++;
csLineOut = csLineSrc;
if (bSlashAsterisk)
{ //之前有"/*"
//寻找"*/"
int pos = csLineSrc.Find(_T("*/"));
if (pos >= 0 )
{
//找到"*/"
bSlashAsterisk = FALSE;
csLineSrc = csLineSrc.Mid(pos + 2);//获取非/*注释代码后,走后面的流程
//继续走后面的
}
else
{
//这一行是注释行
continue;
}
}
//else
{//之前没有"/*"
//寻找"//"
int pos = csLineSrc.Find(_T("//"));
if (pos >= 0 )
{
//找到"//"
csLineSrc = csLineSrc.Left(pos);
//寻找前面是否存在"/*"
int pos2 = csLineSrc.Find(_T("/*"));
if (pos2 >= 0 )
{
}
else
{
}
}
else
{
//干净代码
}
}
if(csLineSrc.Left(4) == _T("查找"))
{
bBeginEnd = TRUE;
csBegin = csLineSrc;
//nCount = 0;
bOutExsit = FALSE;
continue;
}
if(csLineSrc.Left(4) == _T("找到"))
{
bBeginEnd = FALSE;
//if(nCount > 0)
if(bOutExsit)
{
fileOut.WriteString(csLineSrc + "/n");
}
continue;
}
if(bBeginEnd)
{
if(csLineSrc.GetLength() > 3)
{
//第2个字符时":",第3个字符时"/"
if(csLineSrc.Left(3).Right(2) == _T("://"))
{
//bBeginEnd = FALSE;
//fileOut.WriteString(csLineSrc + "/n");
//continue;
//找到第一个中文字符位置
int iPos = -1;
for(int i = 0 ; i < csLineSrc.GetLength(); i++)
{
//if((BYTE)csLineSrc.GetAt(i) > 0x80)
if (IsDBCSLeadByte(csLineSrc.GetAt(i)))
{
iPos = i;
break;
}
}
//int iPos2 = -1;
/*
if(iPos >= 0)
{
//寻找该中文字符前面的引号"
while(iPos >= 0)
{
if(csLineSrc.GetAt(i) = '/"')
{
iPos2 = iPos;
break;
}
iPos--;
}
}
*/
//iPos2 = iPos;
if(iPos >= 0)
{
//寻找前面是否存在/* 和 //
if(csLineSrc.Left(iPos + 1).Find("//") >= 0)
{
continue;
}
if(csLineSrc.Left(iPos + 1).Find("/*") >= 0)
{
continue;
}
}
if(!bOutExsit)
{
fileOut.WriteString(csBegin + "/n");
bOutExsit = TRUE;
}
fileOut.WriteString(csLineSrc + "/n");
//nCount++;
}
else
{
if(!bOutExsit)
{
fileOut.WriteString(csBegin + "/n");
bOutExsit = TRUE;
}
fileOut.WriteString(csLineSrc + "/n");
}
}
else
{
if(!bOutExsit)
{
fileOut.WriteString(csBegin + "/n");
bOutExsit = TRUE;
}
fileOut.WriteString(csLineSrc + "/n");
}
}
else
{
fileOut.WriteString(csLineSrc + "/n");
}
/*
if(csLineSrc == _T("END"))
{
bBeginEnd = FALSE;
fileOut.WriteString(csLineSrc + "/n");
continue;
}
if(bBeginEnd)
{
//前4个空格" "第5个是字符 --- 表示是1个控件名
CString csTemp = csLineSrc.Left(5);
csTemp.TrimLeft();
csTemp.TrimRight();
if(!csTemp.IsEmpty())
{
csTemp = csLineSrc.Mid(5);
//找到一个空格
int find = csTemp.Find(" ");
if(find < 0)
{
find = csTemp.Find(" ");
}
//
if(find < 0)
{
fileOut.WriteString(csLineSrc + "/n");
}
else
{
fileOut.WriteString(csLineSrc.Left(5) + csTemp.Left(find+1) + "/n");
}
}
}
else
{
fileOut.WriteString(csLineSrc + "/n");
}*/
}
fileIn.Close();
fileOut.Close();
AfxMessageBox("OK");
}