文本文件中记录形式如下:
#489=PATH('General Closed Path Profile''s path.',(#2780,#2781,#2782,#2783,
#2784,#2785,#2786,#2800,#2801,#2802,#2803,#2804,#2805,#2806,#2807,
#2808));
要将该纪录转换成以“=”前#489为父节点,“=”后的各个#2780,#2781等为子节点的结构该如何处理该条记录阿,望各位字符串处理高手给俺点帮助,小弟在这先谢过了。

解决方案 »

  1.   

    int n=str.Find('=');//先找等号的位置
    parent=str.Right(n);//取字符串右边的n个字符
    n=str.Find('#',n+1);/
    str1=str.Mid(n+1,n1-n-1);
    ---------------------
    主要就是用上面的3个函数,你可以看MSDN里的解释还都有例子的。
    CString s( "abcdef" );
    ASSERT( s.Find( 'c' ) == 2 );
    ASSERT( s.Find( "de" ) == 3 );如果你的字符串格式确定,还可以试试下面的方式:
    char str[] = "1231-6787*78889";
    int x1,x2,x3;
    sscanf(str,"%d-%d*%d",&x1,&x2,&x3);//sscanf取出字符串str中的三个数字,也可以试试类似的方法
      

  2.   

    你的问题有两个要解决的难点,其实也不算很难。
    1)字符串的解析,解析出父节点和它后面的所有子节点。本来字符串的解析很简单的,不管是用标准C函数还是CString都可以。但问题出在PATH('General Closed Path Profile''s path.',...),这里面有个字符串,使我们不能简单的通过查找‘#’来定位,因为前面的字符串中有可能也包含#,更坦白的说由于这个字符串的存在是我们不能通过查找任何字符来定位(这个字符串是可以包含任何字符的)。这种情况的正解通常是写个语法分析程序,真麻烦。
    再告诉你一个好消息,针对你的特殊文件格式,可以不用写语法分析程序。先从头找到‘=’,前面是父接点,然后从字符串尾部向前找‘(’,从‘(’往后开始就可以找到每个子节点了。2)递归,解析出所有父节点和子节点后就要整理所有节点的父子关系了。通常是把所有父子节点放到一个二维数组中,最后递归添加到TreeView中。工作烦琐但称不上困难。
      

  3.   

    楼上各位高手,我现在的解决方式如下:
    int i01=str1.Find("=");
    HTREEITEM  hti1 = m_EntityTree.InsertItem ( (str1.Left(i01)),0,1 );  
    //=================加子目录============================  
     for(int i=1; i<str1.GetLength();i++)

     if(str1.GetAt(i)=='#')
    {
     int i1=str1.Find("#",i);
     int i02=str1.Find(",",i1);
     HTREEITEM  hti2 = m_EntityTree.InsertItem ( (str1.Mid(i1,i02-i1)),0,1,hti1 );
     可是最后一个#XXXX取不到。
      

  4.   

    最后一个单独处理:
    int i01,i02,i1
    HTREEITEM  hti2;i01=str1.Find("=");
    HTREEITEM  hti1 = m_EntityTree.InsertItem ( (str1.Left(i01)),0,1 );  
    //=================加子目录============================  
     for(int i=1; i<str1.GetLength();i++)

     if(str1.GetAt(i)=='#')
    {
     i1=str1.Find("#",i);
     i02=str1.Find(",",i1);
     hti2 = m_EntityTree.InsertItem ( (str1.Mid(i1,i02-i1)),0,1,hti1 );
    }
    }
    i02=str1.Find(")",i1);
    hti2 = m_EntityTree.InsertItem ( (str1.Mid(i1,i02-i1)),0,1,hti1 );