文本文件中记录形式如下:
#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等为子节点的结构该如何处理该条记录阿,望各位字符串处理高手给俺点帮助,小弟在这先谢过了。
#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等为子节点的结构该如何处理该条记录阿,望各位字符串处理高手给俺点帮助,小弟在这先谢过了。
解决方案 »
- 如何根据INPUT中的ID值获取此文本框?
- CString类型数组问题
- 怎么让NTGraph画出的点要有突出的显示(比如给出的数字点比没要求画出来的点要大),或者没要求画出的点不画出来,怎么弄?
- MFC显示JPG图片问题??
- 高人指点!!如何侦测接入点AP(Access Point) ?
- joy0861,你的文件大师里的文件分割的代码可以给我吗?
- 请教输入法显示问题
- 快来帮忙!快要晕倒了,打印问题!!
- 100分求资料!!!!! 谁知道那可下载odbc api的资料?
- 如何控制多块视频捕获卡进行显示与抓拍?紧急!!!
- 请教关于VTK的问题!!!!!11
- 急需 《Visual C灵感编程》一书光盘。
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中的三个数字,也可以试试类似的方法
1)字符串的解析,解析出父节点和它后面的所有子节点。本来字符串的解析很简单的,不管是用标准C函数还是CString都可以。但问题出在PATH('General Closed Path Profile''s path.',...),这里面有个字符串,使我们不能简单的通过查找‘#’来定位,因为前面的字符串中有可能也包含#,更坦白的说由于这个字符串的存在是我们不能通过查找任何字符来定位(这个字符串是可以包含任何字符的)。这种情况的正解通常是写个语法分析程序,真麻烦。
再告诉你一个好消息,针对你的特殊文件格式,可以不用写语法分析程序。先从头找到‘=’,前面是父接点,然后从字符串尾部向前找‘(’,从‘(’往后开始就可以找到每个子节点了。2)递归,解析出所有父节点和子节点后就要整理所有节点的父子关系了。通常是把所有父子节点放到一个二维数组中,最后递归添加到TreeView中。工作烦琐但称不上困难。
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取不到。
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 );