现有一个字符串的文本文件,
1 汉字 汉字 12345678987654432456788999999999999999999999999
2 汉字 汉字 123456789876544324567889
3 汉字 汉字汉字 123456789876544324567889
4 汉字字 汉字 123456789876544324567889
5 汉字汉字 汉字 123456789876544324567889999999999999999
6 汉字 汉字 123456789876544324567889
7 汉字 汉字汉字 123456789876544324567889
8 汉字字 汉字 123456789876544324567889
9 汉字 汉字 12345678987654432456788999999999999
10 汉字汉字 汉字 123456789876544324567889
11 汉字 汉字 123456789876544324567889
.
.
.
.
.
.
.
.
.
TXT文件内容如上,每个字段按空格分开,但是每个字段不定长。
请问如何从文件里面取出各行的某一字段
显示到LISTCTRL框框,LISTCTRL框框是分成了4列,用来分别插入ID,汉字1,汉字2,数据内容用str = TxtFile.Readstring(buffer,length);可以取出具体哪一字段,
然后直接m_list.setItermText(nrow,ncol,str)就可以插入框框,
但是length 的长度不定,也不知道,所以好像不行。
能不能有什么函数是认到空格就停止,把之前的字符度出来啊?谢谢大家指点,帮忙。谢谢~@!
1 汉字 汉字 12345678987654432456788999999999999999999999999
2 汉字 汉字 123456789876544324567889
3 汉字 汉字汉字 123456789876544324567889
4 汉字字 汉字 123456789876544324567889
5 汉字汉字 汉字 123456789876544324567889999999999999999
6 汉字 汉字 123456789876544324567889
7 汉字 汉字汉字 123456789876544324567889
8 汉字字 汉字 123456789876544324567889
9 汉字 汉字 12345678987654432456788999999999999
10 汉字汉字 汉字 123456789876544324567889
11 汉字 汉字 123456789876544324567889
.
.
.
.
.
.
.
.
.
TXT文件内容如上,每个字段按空格分开,但是每个字段不定长。
请问如何从文件里面取出各行的某一字段
显示到LISTCTRL框框,LISTCTRL框框是分成了4列,用来分别插入ID,汉字1,汉字2,数据内容用str = TxtFile.Readstring(buffer,length);可以取出具体哪一字段,
然后直接m_list.setItermText(nrow,ncol,str)就可以插入框框,
但是length 的长度不定,也不知道,所以好像不行。
能不能有什么函数是认到空格就停止,把之前的字符度出来啊?谢谢大家指点,帮忙。谢谢~@!
解决方案 »
- C++ 如何响应窗体外鼠标事件
- 请问如何得到ListControl控件里,没有被选上的Item?
- 如何做到像XP操作系统这样的工具栏,不依赖任何第三方工具,只用MFC的类。vc6的只支持16色的,怎么才能支持32位的阿??
- 'IHTMLDocument2' : undeclared identifier 怎么解决
- 请问在vc中绝对值是用那个函数
- _variant_t类型的一个奇怪错误
- Installshield X做的安装文件过大,想要进行压缩?用什么工具?或者Installshield本身怎么减小安装文件?
- 快来拿分:(100分)m_SkinName.Format("%s",_T("skin\1.skn"))
- 怎样将手工添加的对话框最小化到任务栏?
- 有的VC代码为什么打开的时候没CLASSWIZARD信息??
- MFC切分界面的问题
- CReBar加入了一个CToolBar,一个CDialogBar,怎样动态的把CDialogBar删除?
然后利用 CString::Find 函数找空格,找到后截取,然后继续,直到找不到为止;
然后读文件的下一行,直到文件末尾。
char *p=" ";
char *pTemp=new char[str.GetLength()+1];
strcpy(pTemp,str);
str=strtok(pTemp,p);
while(!str.IsEmpty())
{
AfxMessageBox(str); //弹出来看看
str=strtok(NULL,p);
}
delete pTemp;
pTemp=NULL;
或者读到CString中 用指针从字符串头上开始遍历
AfxExtractSubString(CString, FullString, Index, _T(' '));其中,第一个参数是用于接收提取的子串;
第二个参数是字符串全串;
第三个参数是子串的索引;
第四个参数是一个可选参数,指示整个串是以什么字符分割为子串,默认是'\n'字符。函数返回值是BOOL类型,当提取到子串时,就返回 非FALSE,否则返回 FALSE。
using namespace std;//...char str[100];
ifstream fin("文件名");
if(fin.is_open()){
for(;;){
fin >> str;
if(fin.eof()) break;
//插入到你想放的列表中
}
fin.close();
}
具体方法,上面各楼都有阐述.例如,CStdioFile读取一行文档;用Cstring的成员函数 find()找到空格所在位置.需要注意的是:
find()的用法// CString::Find ( TCHAR ch )
CString s( "abcdef" );
ASSERT( s.Find( 'c' ) == 2 );
//然后还要用left()提取空格前的汉字;并且后一个汉字还要用CString::Find( TCHAR ch, int nStart )使nStart=s.Find( 'c' )+1来查找下一个空格,因此,需要设置一个int类型的位置参数/变量
AfxExtractSubString(CString, FullString, Index, _T(' ')); 其中,第一个参数是用于接收提取的子串;
第二个参数是字符串全串;
第三个参数是子串的索引;
第四个参数是一个可选参数,指示整个串是以什么字符分割为子串,默认是'\n'字符。 函数返回值是BOOL类型,当提取到子串时,就返回 非FALSE,否则返回 FALSE。
这个函数我没弄明白第三个形参字串的索引指什么?再次谢谢各位!