Irgendwie so in der Art könnte es aussehen:
Delphi-Quellcode:
function TForm2.ParseString(Root: TTreeNode;
const S:
String): Integer;
var
I, J: Integer;
T: TTreeNode;
begin
I := 1;
while (I <= Length(S))
do
begin
if (S[I]
in ['
W', '
V', '
R'])
then
begin
J := I + 1;
while (J <= Length(S))
and (S[J]
in ['
0'..'
9'])
do
begin
Inc(J);
end;
T := TreeView1.Items.AddChild(Root, Copy(S, I, J - I));
if (S[I] = '
W')
then
begin
Inc(I, J - I + ParseString(T, Copy(S, J + 1, Length(S))));
end else
begin
Inc(I, J - I);
end;
end else if (S[I] = '
)')
then
begin
Inc(I);
Break;
end else
begin
raise Exception.Create('
Failed to parse string.');
end;
end;
Result := I;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
TreeView1.Items.Clear;
TreeView1.Items.BeginUpdate;
try
ParseString(
nil, AnsiUpperCase('
V900W2(w2(v90))V90W5(V45)'));
finally
TreeView1.Items.EndUpdate;
end;
end;
Geht auf jeden Fall noch eleganter, aber die Lösung hier sollte recht einfach zu verstehen sein. Die Funktion zerlegt den String in seine Einzelteile und ordnet die Befehle dann in einen TreeView ein.