现有一个字符串的文本文件,
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.   

    有一个split函数,还有一个字符串搜索的函数,都可以把空格搜索出来。
      

  2.   

    读取文本文件使用 CStdioFile 类,使用 CStdioFile::ReadString 一次读取一行,放入 CString 变量中;
    然后利用 CString::Find 函数找空格,找到后截取,然后继续,直到找不到为止;
    然后读文件的下一行,直到文件末尾。
      

  3.   

    strtok(),以"[空格]"作为令牌循环调用就可以依次读出每个字段
      

  4.   

    用CStdioFile类ReadString读到一个CString里面,然后用Tokenize或Find等函数。
      

  5.   

    CString str="aaa,bbb,ccc";
    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;
      

  6.   

    用CStdioFile类ReadString读,然后用Find。
    或者读到CString中  用指针从字符串头上开始遍历 
      

  7.   

    用这个MFC函数来提取子串
    AfxExtractSubString(CString, FullString, Index, _T(' '));其中,第一个参数是用于接收提取的子串;
    第二个参数是字符串全串;
    第三个参数是子串的索引;
    第四个参数是一个可选参数,指示整个串是以什么字符分割为子串,默认是'\n'字符。函数返回值是BOOL类型,当提取到子串时,就返回 非FALSE,否则返回 FALSE
      

  8.   

    CStdioFile读取一行文档,然后用CString::Find()查找空格,解析字符串
      

  9.   

    直接用标准文件IO的格式化输入就可以实现以空格和回车为分隔的读取了。#include <fstream>
    using namespace std;//...char str[100];
    ifstream fin("文件名");
    if(fin.is_open()){
       for(;;){
           fin >> str;
           if(fin.eof()) break;
           //插入到你想放的列表中
        }
        fin.close();
    }
      

  10.   

    基本程序过程应该是清楚的,即:1)读取文本文件内容;2)将文本文件内容按行拆分.
    具体方法,上面各楼都有阐述.例如,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类型的位置参数/变量

      

  11.   

    谢谢大家,我用的strtok函数解决的。用这个MFC函数来提取子串 
    AfxExtractSubString(CString, FullString, Index, _T(' ')); 其中,第一个参数是用于接收提取的子串; 
    第二个参数是字符串全串; 
    第三个参数是子串的索引; 
    第四个参数是一个可选参数,指示整个串是以什么字符分割为子串,默认是'\n'字符。 函数返回值是BOOL类型,当提取到子串时,就返回 非FALSE,否则返回 FALSE。
    这个函数我没弄明白第三个形参字串的索引指什么?再次谢谢各位!