function MakeClasses(Input:
string):
string;
var RegExpr, RegExprAtt, RegExprWert:TRegExpr;
header, strings, zahlen:
string;
begin
Result:='
';
RegExpr:=TRegExpr.Create;
RegExprAtt:=TRegExpr.Create;
RegExprWert:=TRegExpr.Create;
try
RegExpr.ModifierG:=false;
RegExpr.Expression:='
{(.*)}';
RegExprAtt.ModifierG:=false;
RegExprAtt.Expression:='
"(.*)":(.*)(,|})';
if RegExpr.Exec(Input)
then begin
repeat
if RegExprAtt.Exec(RegExpr.Match[0])
then begin
header:='
';
strings:='
';
zahlen:='
';
repeat
if lowercase(RegExprAtt.Match[1]) = '
class'
then begin
if header = '
'
then
header:=StringReplace(RegExprAtt.Match[2], '
"', '
', [rfReplaceAll])
else
raise Exception.Create('
Fehler, Class-Eintrag zweimal vorhanden.');
end
else begin
RegExprWert.Expression:='
(["0-9.]*)';
if RegExprWert.Exec(RegExprAtt.Match[2])
and (RegExprWert.Match[1] = RegExprAtt.Match[2])
then
begin
zahlen:=zahlen + '
,' + RegExprAtt.Match[1];
end
else strings:=strings + '
,' + RegExprAtt.Match[1];
end;
until not RegExprAtt.ExecNext;
end;
Result:=Result +
'
var'#13 +
'
class' + strings + '
:string;'#13 +
'
begin'#13 +
'
class:=''
' + header + '
''
;'#13 +
'
end;'#13;
until not RegExpr.ExecNext;
end;
finally
RegExpr.free;
RegExprAtt.free;
RegExprWert.free;
end;
end;