VC-字符串分割
需求
在医疗设备开发中,经常需要读取不同设备间的数据进行对比分析,现有某设备的血压数据文件如下,类型为ASII,用“;”进行分隔,第一列为日期类型,第二列为double类型,第三列为int类型,第四列为double。
Time;Fbp(mmHg); Height (mmHg); Bbp(mmHg)
15:22:36.015; 110.5; -13; 105
15:22:36.020; 111.5; -13; 105
15:22:36.025; 113.5; -13; 106
15:22:36.030; 112.5; -13; 106
分析 分析数据文件,数据为按行存储,因此可以使用CStdioFile类的ReadString()函数按行读取数据。
virtual BOOL ReadString(CString& rString);
参数
rString 读取数据。
返回值
成功返回TRUE,失败返回FALSE。
读取完一行数据后,可用AfxExtractSubString函数进行子字符串提取。
BOOL AFXAPI AfxExtractSubString(CString& rString,LPCTSTR lpszFullString,int iSubString,TCHAR chSep);
参数
rString 待分隔字符串
lpszFullString 提取的子字符串
iSubString 第几个子字符串
chSep 分隔符
返回值
成功返回TRUE,失败返回FALSE。
代码
bool ReadFile(CString strFile)
{
CStdioFile mFile;
if ( !mFile.Open(strFile, CFile::modeRead | CFile::shareDenyNone) )
return false;
CString strLine;
CString strCol[4];
while ( mFile.ReadString(strLine) )
{
AfxExtractSubString(strCol[0],strLine,0, _T(';'));
AfxExtractSubString(strCol[1],strLine,1, _T(';'));
AfxExtractSubString(strCol[2],strLine,2, _T(';'));
AfxExtractSubString(strCol[3],strLine,3, _T(';'));
}
mFile.Close();
return true;
}