Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
Внизсформировать иерархию Найти похожие ветки
← →
Scott Storch (2011-03-12 13:26) [0]есть строки список строк вида:
A \ B \ C
A \ A
B \ B
нужно сформировать иерархию. Должно получится так
A|
|
--B
|
--A
B|
|
--B
как организовать алгоритм, можете на словах объяснить, а то запутался совсем
← →
clickmaker © (2011-03-12 13:32) [1]а где C?
← →
Scott Storch (2011-03-12 13:36) [2]
> а где C?
забыл дописать, должно быть так
A|
|
--B|
|
--C
|
--A
B|
|
--B
← →
clickmaker © (2011-03-12 14:19) [3]цикл 1
разбиваешь каждую строку на массив
node := nil
цикл 2
node := CreateNode(node, элемент массива)
конец цикла 2
конец цикла 1
в CreateNode проверяешь (когда node = nil), если нод с уровнем 0 и таким заголовком есть, то просто возвращаешь его, иначе создаешь новый
← →
sniknik © (2011-03-12 15:35) [4]
procedure TForm1.Button1Click(Sender: TObject);
var
sList: TStringList;
i: integer;
function FindNode(inNode: TTreeNode; const val: string): TTreeNode;
begin
if Assigned(inNode)
then result:= inNode.getFirstChild
else result:= TreeView1.Items.GetFirstNode;
while Assigned(result) do begin
if result.Text = val then Exit;
result:= result.getNextSibling;
end;
end;
procedure AddLineChild(Parent: TTreeNode; const st: string);
var
n: integer;
sVal: string;
Node: TTreeNode;
begin
n:= Pos(" \", st);
if n = 0 then begin
TreeView1.Items.AddChild(Parent, st);
Exit;
end;
sVal:= Copy(st, 1, n - 1);
Node:= FindNode(Parent, sVal);
if Assigned(Node)
then AddLineChild(Node, Copy(st, n + 3, MaxInt))
else AddLineChild(TreeView1.Items.AddChild(Parent, sVal), Copy(st, n + 3, MaxInt));
end;
begin
sList:= TStringList.Create;
try
sList.Text:= "A \ B \ C"#13#10+
"A \ A"#13#10+
"B \ B";
TreeView1.Items.BeginUpdate;
try
TreeView1.Items.Clear;
for i:= 0 to sList.Count - 1 do
AddLineChild(nil, sList.Strings[i]);
finally
TreeView1.Items.EndUpdate;
end;
finally
sList.Free;
end;
end;
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.004 c