file.Open("IP_ROOM.txt",CFile::modeRead);
CString str;//存放文本内容
char* pBuf;//动态数组存放文件内容
pBuf=new char[file_length+1];
pBuf[file_length]=0;//将数组最后一位设置为结束符
file.Read(pBuf,file_length);
str=pBuf;
file.Close();
if(str.Find("\r\n",0)!=-1)//查询换行符"\r\n"的第一个字符索引,从0开始,若不存在则返回-1
{
n=str.Find("\r\n",0);
//TXT文件中,字符存放格式:3#101 111.121.121.121 yes房间号,IP,yes都用空格“ ”间隔开
//查找房间号字符串
f=str.Find(" ",0);
str_room=str.Left(f);
str=str.Delete(f,str_room.GetLength());//从str字符串删除房间号 //查找IP号字符串
f=str.Find(" ",0);
str_ip=str.Left(f);
str=str.Delete(f,str_ip.GetLength());//从str字符串删除IP
//查找yes
f=str.Find("\r\n",0);
isOpen=str.Left(f);
str=str.Delete(f,isOpen.GetLength());///从str字符串删除yes //第一列要用InSertItem(),插入所添加或删除的房间号
((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,str_room);//0行0列 //将第1行第二列的值设置为所添加或删除房间的IP地址//0行,1列
((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,str_ip);
//是将第1行第三列的值设置为所添加或删除房间的isOpen//0行,2列
((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 2,isOpen); UpdateData();
}
但是结果却是只有列表0行0列有插入数据,第1列和第2列没有插入数据
难道str.Delete()后CString的索引不变?
如果不用CString::Delet(),CString::Left()还有什么办法
CString str;//存放文本内容
char* pBuf;//动态数组存放文件内容
pBuf=new char[file_length+1];
pBuf[file_length]=0;//将数组最后一位设置为结束符
file.Read(pBuf,file_length);
str=pBuf;
file.Close();
if(str.Find("\r\n",0)!=-1)//查询换行符"\r\n"的第一个字符索引,从0开始,若不存在则返回-1
{
n=str.Find("\r\n",0);
//TXT文件中,字符存放格式:3#101 111.121.121.121 yes房间号,IP,yes都用空格“ ”间隔开
//查找房间号字符串
f=str.Find(" ",0);
str_room=str.Left(f);
str=str.Delete(f,str_room.GetLength());//从str字符串删除房间号 //查找IP号字符串
f=str.Find(" ",0);
str_ip=str.Left(f);
str=str.Delete(f,str_ip.GetLength());//从str字符串删除IP
//查找yes
f=str.Find("\r\n",0);
isOpen=str.Left(f);
str=str.Delete(f,isOpen.GetLength());///从str字符串删除yes //第一列要用InSertItem(),插入所添加或删除的房间号
((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->InsertItem(0,str_room);//0行0列 //将第1行第二列的值设置为所添加或删除房间的IP地址//0行,1列
((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 1,str_ip);
//是将第1行第三列的值设置为所添加或删除房间的isOpen//0行,2列
((CListCtrl*)GetDlgItem(IDC_LIST_ROOM))->SetItemText(0, 2,isOpen); UpdateData();
}
但是结果却是只有列表0行0列有插入数据,第1列和第2列没有插入数据
难道str.Delete()后CString的索引不变?
如果不用CString::Delet(),CString::Left()还有什么办法
int Delete(int nIndex, int nCount)
删除字符,删除从下标nIndex开始的nCount个字符你得数据是这样3#101 111.121.121.121 yes
程序中:
f=str.Find(" ",0);
str_room=str.Left(f);
str=str.Delete(f,str_room.GetLength());//从str字符串删除房间号
这个地方你并没有删除房间号,你只是把IP中的前str_room.GetLength()个字符给删除了。程序中后面的几个删除也是一样的问题。
改成 str = str.Mid(f+1);
str_room=str.Left(f);
//str=str.Delete(f,str_room.GetLength());
str=str.Delete(0,str_room.GetLength()+1); f=str.Find(" ",0);
str_ip=str.Left(f);
// str=str.Delete(f,str_ip.GetLength());
str=str.Delete(0,str_ip.GetLength()+1); f=str.Find("\r\n",0);
isOpen=str.Left(f);
// str=str.Delete(f,isOpen.GetLength());
str=str.Delete(0,isOpen.GetLength());
现在是什么都不显示了。。
f=str.Find(" ",0);
str_room=str.Left(f);
str = str.Mid(f+1);
f=str.Find(" ",0);
str_ip=str.Left(f);
str = str.Mid(f+1);
f=str.Find("\r\n",0);
isOpen=str.Left(f+4);为什么这里要+4才可以显示yes
你Find的是第一个空格,但yes并不是在这个空格之后,后面还有其它字符呢,所以光+1肯定不行啊