如下的字符串转换:
'11(人事管理)'#8'1101(考勤)'#8'1102(福利)'#8'12(销售管理)'#8'13(财务管理)'#8'1301(工资)'#8'1302(差旅费)'#8'14(客户管理)'#8// 它会生成如下的树:
11(人事管理)|
|-1101(考勤) //11是上级的编号
|-1102(福利) //11是上级的编号
12(销售管理)
13(财务管理)|-1301(工资) //13是上级的编号
|-1302(差旅费) //13是上级的编号
14(客户管理) 请问该如何处理?
先谢谢了!
'11(人事管理)'#8'1101(考勤)'#8'1102(福利)'#8'12(销售管理)'#8'13(财务管理)'#8'1301(工资)'#8'1302(差旅费)'#8'14(客户管理)'#8// 它会生成如下的树:
11(人事管理)|
|-1101(考勤) //11是上级的编号
|-1102(福利) //11是上级的编号
12(销售管理)
13(财务管理)|-1301(工资) //13是上级的编号
|-1302(差旅费) //13是上级的编号
14(客户管理) 请问该如何处理?
先谢谢了!
解决方案 »
- 三层向导问题?
- 在同一组件中实现两个不同的PopupMenu
- 如何用FastReport做报表与打印
- 各位高手求助关于Application.CreateForm方面的问题
- 考勤告急200分求教
- 关于图片存储的问题!大哥帮忙啊。。
- 怎样才能让程序运行是不可见!?
- 有关用delphi制作安装盘的问提
- 关于Delphi 根据URL获取该网址title(也即是标题)的问题~~~
- 大家好,我刚学Delphi,有一个关于Showmessage的问题,很菜的!
- 通过delphi的菜单Component--Install Component安装一个控件后发现该控件干扰其它程序的执行,请问怎样才能把它从delphi中去掉?
- 一个英文下乱码的怪问题
var
RootNode,CNode:TTreeNode;for i:=1 to Length(字符串a) do
begin
//分解读取,用一个循环就可以了。 end;
如果我的树有多层的话,你怎么分层呢?
我知道#8是分隔符,但是生成树(主要是有多层的树)我就没办法了,
帮帮忙吧
帮帮忙啊,大家都来看看吧
procedure TForm1.Button1Click(Sender: TObject);
const
s = '11(人事管理)' + #8+ '1101(考勤)'+ #8+ '1102(福利)'+ #8 + '12(销售管理)'+ #8 + '13(财务管理)' + #8 + '1301(工资)'+ #8 + '1302(差旅费)' + #8 +'14(客户管理)'+ #8;
var
sPrev, sCur: string;
I: Integer;
StrList: TStrings;
RootNode: TTreeNode;
begin
StrList := TStringList.Create;
try
StrList.Text := StringReplace(s, #8, #13#10, [rfReplaceAll]);
for I := 0 to StrList.Count - 1 do
begin
sCur := Copy(StrList[I], 1, 2);
if sPrev = sCur then
TreeView1.Items.AddChild(RootNode, Copy(StrList[I], 5, Length(StrList[I]) -4))
else
RootNode := TreeView1.Items.Add(TreeView1.Items.GetFirstNode, Copy(StrList[I], 3, Length(StrList[I]) - 2));
sPrev := sCur;
end;
finally
StrList.Free;
end;end;
不就用个WHILE循环,再结合动态数组或直接丢TREEVIEW里面就可以搞定啦
楼上有个朋友说得对,自己要多动脑呀
要不,我们不都成编程机器啦
呵呵,说说楼主可别生气
我到不生气,但是好象非用递归不可哦,因为树是N层的,
这个字符串是我用递归从数据库表取得的,应该用递归回去
DWGZ() ( ) 信誉:100 的代码我如果 实验,需要加一个Win32/treeview吧?加了以后还要干什么啊?我怎么实验不成呢?
如果是N层的树呢?
var
i : Integer;
Str : string;
Param : string;
FLevel : Integer;
TreeStrs : string;
function SplitStr(var Strs : string;var Param : string) : Boolean;
var
FPos : Integer;
begin
if Strs = '' then
begin
Result := False;
Exit;
end;
FPos := Pos(#8,Strs);
Strs := Copy(Strs,FPos +1 ,Length(Strs));
Param := Copy(Strs,1,FPos -1 );
Result := True;
end;
begin
while SplitStr(TreeStrs,Param) do
begin
with TreeView1 do
begin
FLevel := Length(Param) div 2;
if FLevel = 1 then
begin
Items.AddChild(nil,Param);
Continue;
end;
for i := 0 to Items.Count -1 do
begin
if (Items[i].level = FLevel -2) and (Items[i].Text = (Copy(Param,1,FLevel * 2 -2))) then
Items.AddChild(Items[i],Param);
end;
end;
end;
end;
子串永远在父串之后,这是肯定的,
可以保证有效字符串中没有#8,这也是肯定的,
有没有更好的方法,我还不知道呢?
我要的是N层树,好象没那么简单哦?
TNode = record
iParent : Integer;
sText : String;
end;
这样的结构,立刻就搞定了。
wsforqyc(大海)
挑战成功!!!!