//获取子字符串个数
int GetSubStrCount(CString &str,char cFlag)
{
cFlag = ',';
int i = 0;
BOOL isHas = FALSE;
for (int iStart = -1; -1 != (iStart = str.Find(cFlag,iStart+1)) ; i++)
{
isHas = TRUE;
}
if (!isHas)
{
return 0;
}
else
{
return i+1;
}
}
//获取子字符串
// i 序号 0
CString GetSubStr(CString &str,int i,char cFlag)
{
i = 0;
cFlag = ',';
int iStart = -1;
int iEnd = 0;
int j = 0;
int iStrCount;
iStrCount = GetSubStrCount(str,cFlag);
if (i>iStrCount -1 || i<0)
{
str = "";
return str;
}
else
{
//do nothing
}
if (i == iStrCount-1)
{
i = iStrCount;
for (;j<i-1;j++)
{
iStart = str.Find(cFlag , iStart+1);
}
return str.Mid(iStart+1 , str.GetLength()-iStart-1);
}
else
{
//do nothing
}
for (; j<i; j++)
{
iStart = str.Find(cFlag , iStart+1);
}
iEnd = str.Find(cFlag , iStart+1);
return str.Mid(iStart+1 , iEnd-iStart-1);
}
void CGpsDataView::OnFileRead()
{
// TODO: 在此添加命令处理程序代码
CStdioFile myFile;
CString oneLine;
int i = 0;
char cFlag = ',';
CString subStr[20];
if(!myFile.Open(_T("gps.txt"),CFile::modeRead | CFile::typeText))
{
AfxMessageBox(_T("打开文件错误!"));
return;
}
else
{
/*do nothing*/
}
while (myFile.ReadString(oneLine))
{
MessageBox(oneLine);
int j = GetSubStrCount(oneLine,cFlag);
for (j;j>0;j--)
{
subStr[j] = GetSubStr(oneLine,i,cFlag);
MessageBox(subStr[j]);
oneLine = oneLine.Right( strlen((LPSTR)(LPCTSTR)oneLine)
-strlen((LPSTR)(LPCTSTR)subStr[j]));
} }
myFile.Close();
}
oneLine 的形式是:$GPGGA,010648.00,2307.594068,N,11321.993772,E,1,07,1.1,31.1,M,-5.2,M,,*48
我循环提取一段段 只能显示出$GPGGA 这一段,老出来这一个。。。。
为什么。。