int nState=m_fx.GetState(); if(nState==1)//正在自动分析 { MessageBox(L"正在自动分析考试文件时间段结果,请先停止后导入数据!"); return; } CFileDlg FileDialog(TRUE,NULL,NULL,NULL,L"音频时间段分析文件(*.txt)|*.txt|全部显示(*.*)|*.*||"); FileDialog.GetOFN().lpstrTitle=L"导入音频时间段分析文件"; if(FileDialog.DoModal()==IDOK) { CString szFileName=FileDialog.GetPathName(); CString szTxt=GetDoc(szFileName); szTxt.Replace(L"\r\n",L"\n"); CStringArray Gets; int nCount=GetStringsFromSpace(szTxt,Gets,L"\n"); if(nCount<=0) { MessageBox(L"未找到相关信息!请检查文件是否正确"); return; } RealDatas.RemoveAll(); for(int i=0;i<nCount;i++) { RANGEINFO item; CStringArray Gets1; CString szItem=Gets.GetAt(i); int nCount1=GetStringsFromSpace(szItem,Gets1,","); if(nCount1>=2) { item.nStart=_wtoi(Gets1[0])*1000; item.nEnd=_wtoi(Gets1[1])*1000; RealDatas.Add(item); } } if((int)RealDatas.GetCount()!=3) { MessageBox(L"导入的音频时间段分析文件不正确,请检查!"); return; } this->RefushList(); }优化此段代码
时间: 2024-01-24 11:05:36 浏览: 97
以下是对给出的代码进行的一些优化建议:
1. 在函数开头定义变量时,尽量使用初始化的方式,避免随意使用未初始化的变量。
2. 在比较整型变量的值时,应该将常量写在前面,以避免将常量误写成变量。
3. 当函数返回值为void时,可以使用return;语句来代替return void;语句。
4. 在读取文件内容时,应该使用CStdioFile类,而不是自己编写函数来实现。
5. 在查找数组元素个数时,应该使用数组的GetSize()函数,而不是使用数组的GetCount()函数。
6. 在循环中访问数组元素时,应该使用数组的At()函数,而不是使用数组的[]运算符。
7. 在对字符串进行替换时,应该使用CString类的Replace()函数,而不是自己编写函数来实现。
8. 在将字符串转换为整型数时,应该使用CString类的ToInt()函数,而不是使用_wtoi()函数。
9. 在判断数组元素个数是否符合要求时,应该使用数组的GetSize()函数,而不是使用(int)强制类型转换。
10. 在对列表控件进行操作时,应该使用其提供的成员函数,而不是直接访问其内部数据结构。
综上所述,以下是对给出的代码进行优化后的版本:
```
int nState = m_fx.GetState();
if (nState == 1) {
MessageBox(L"正在自动分析考试文件时间段结果,请先停止后导入数据!");
return;
}
CFileDialog FileDialog(TRUE, NULL, NULL, OFN_FILEMUSTEXIST, L"音频时间段分析文件(*.txt)|*.txt|全部显示(*.*)|*.*||", this);
FileDialog.m_ofn.lpstrTitle = L"导入音频时间段分析文件";
if (FileDialog.DoModal() == IDOK) {
CString szFileName = FileDialog.GetPathName();
CStdioFile file(szFileName, CFile::modeRead | CFile::typeText);
CString szTxt;
file.ReadString(szTxt);
szTxt.Replace(L"\r\n", L"\n");
CStringArray gets;
int nCount = GetStringsFromSpace(szTxt, gets, L"\n");
if (nCount <= 0) {
MessageBox(L"未找到相关信息!请检查文件是否正确");
return;
}
CArray<RANGEINFO> realDatas;
for (int i = 0; i < nCount; i++) {
RANGEINFO item;
CStringArray gets1;
CString szItem = gets.GetAt(i);
int nCount1 = GetStringsFromSpace(szItem, gets1, L",");
if (nCount1 >= 2) {
item.nStart = gets1[0].ToInt() * 1000;
item.nEnd = gets1[1].ToInt() * 1000;
realDatas.Add(item);
}
}
if (realDatas.GetSize() != 3) {
MessageBox(L"导入的音频时间段分析文件不正确,请检查!");
return;
}
RefushList(realDatas);
}
```
其中,RefushList()函数的参数已经修改为了CArray<RANGEINFO>类型,用于保存从文件中读取的数据。
阅读全文