有一个ini文件,
我用CString 类型的变量获取了它的一个字符串的值,在处理这个值时我感觉到麻烦很大,在这里求助,希望能得到大家的帮助CString s="22:03:12,23:33:33,34,39"s是我从ini文件中读出来的,其中22:03:12是起始时间(时分秒),22:03:12现在我想把这两个时间输入到一个控件中,就像IP控件那样,中间的冒号不能动,只有时分秒可以变动;后边的整数34,和39输入到其它的控件中,
刚开始我还以为这问题简单,后来越想越觉得的麻烦,首先这个字符串如何分割开分别读就是问题
其次,我分离了字符串,还要把它们转到控间中又是很麻烦的转换我实在想的头大了,哪位大侠解决过类似的问题,给一个例程看看吧,感激不尽!
我用CString 类型的变量获取了它的一个字符串的值,在处理这个值时我感觉到麻烦很大,在这里求助,希望能得到大家的帮助CString s="22:03:12,23:33:33,34,39"s是我从ini文件中读出来的,其中22:03:12是起始时间(时分秒),22:03:12现在我想把这两个时间输入到一个控件中,就像IP控件那样,中间的冒号不能动,只有时分秒可以变动;后边的整数34,和39输入到其它的控件中,
刚开始我还以为这问题简单,后来越想越觉得的麻烦,首先这个字符串如何分割开分别读就是问题
其次,我分离了字符串,还要把它们转到控间中又是很麻烦的转换我实在想的头大了,哪位大侠解决过类似的问题,给一个例程看看吧,感激不尽!
至于时间类型的控件没有做过
CString first, second, th, fo;
first = s.left(8);
second = s.mid(9, 8);
th = s.mid(18, 2);
fo = s.mid(21, 2);
靠, 都是定长的还不好分解, 有没有搞错.到控件里, 弄个编辑框, 定时刷新里面的值就是了.
int hour, mintinue, second;
hour = atoi(first.left(2));
mintinue = ..
second = ..
CString tm1;
while(...)
{
tm1.Format("%d:%d:%d", hour, mintinue, second);
SetDlgItemText(IDC_EDIT1, tm1);
second ++;
if(second == 60)
mininue++, second=0;
}
// 功能: 拆分字符串
// 参数:
// IN lpszInput 需要分析的字符串
// IN nLen 字符串长度
// IN lpszSplit 分隔符
// INOUT ppszList 输出字符串数组
// INOUT nCount 字符串数组大小, 实际输出个数
// INOUT nMaxLen 字符串长度, 实际最大长度
// 返回:
// TRUE 操作成功, FALSE 操作失败
//////////////////////////////////////////////////
BOOL Split( LPCTSTR lpszInput, UINT nLen, LPCTSTR lpszSplit,
char **ppszList, UINT &nCount, UINT &nMaxLen )
{
if ( lpszInput && nLen>0 && lpszSplit )
{
UINT nPos = 0,
nOffset = 0,
nSplitLen = (UINT)strlen( lpszSplit ),
nItemCount = 0;
while ( nOffset<nLen )
{
// 比较分隔符
char *pszOffset = strstr( lpszInput + nOffset, lpszSplit );
if ( pszOffset )
{
nPos = nOffset;
nOffset = pszOffset - lpszInput; if ( ppszList && nItemCount<nCount && nOffset - nPos<nMaxLen && nOffset > nPos )
{
if ( ppszList[nItemCount] )
{
memset( ppszList[nItemCount], 0, nMaxLen );
memcpy( ppszList[nItemCount], lpszInput + nPos, nOffset - nPos );
}
}
else
{
nMaxLen = max( nMaxLen, nOffset - nPos + 1 );
}
nOffset += nSplitLen;
nItemCount ++;
}
else
{
break;
}
} return ( nCount=nItemCount )>0; }
return FALSE;
}
使用: 第一次传空ppszList获得个数和最长行数, 然后初始化ppszList, 再次调用得到数据.