![]() |
String richtig zerlegen
Hi DP
wie kann ich folgenden String richtig parsen.
Code:
rauskommen soll dann
{"class":"Shaman","spec":"Enhancement","role":"DPS","talents":"0\/45\/16","gearraw":"226.63","gearbuffed":"250.99","warncount":1,"rawpos":527,"buffpos":600}
Delphi-Quellcode:
Es kann aber vorkommen das sich der Parsestring erweitert, sprich es können Werte dazukommen.
var
class,spec,role,talents :string; begin class:='Shaman'; end; Ob die nun vorne oder hinten angereiht werden sei dahingestellt. Wie kann ich sowas am schönsten lösen ? lg bundy |
Re: String richtig zerlegen
Delphi-Quellcode:
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; ![]() |
Re: String richtig zerlegen
'class' ist ein ziemlich unglücklich gewählter Bezeichner für ein Delphi-Codefragment. Ich könnte mir gut vorstellen, das der Compiler das ähnlich sieht und schmollt.
|
Re: String richtig zerlegen
Er wird es ganz bestimmt.
|
Re: String richtig zerlegen
hy cool, den code muss ich mal :coder: verarbeiten :thumb: DANKE
|
Re: String richtig zerlegen
Und warum nicht einfach so. bzw so ähnlich (übergabe, funktion usw....)
Gruß Stefan
Delphi-Quellcode:
procedure parse();
var parse1, Parse2, parse3 : string; loop: integer; theList : TStrings; varLine : string; defLine : string; begin thestr2Parse := '{"class":"Shaman","spec":"Enhancement","role":"DPS","talents":"0\/45\/16","gearraw":"226.63","gearbuffed":"250.99","warncount":1,"rawpos":527,"buffpos":600}'; Parse1 := copy(theStr2Parse, 2, length(theStr2Parse)-2); parse2 := AnsiReplaceStr(Parse1,':','='); parse3 := AnsiReplaceStr(Parse2,'"',''); theList := TStringList.Create; theList.CommaText := parse3; memo1.Clear; varLine := 'var '; for loop := 0 to theList.Count-1 do begin varLine := varLine + theList.Names[loop]; if loop = theList.Count-1 then varLine := varLine+';' else varLine := varLine+','; end; memo1.Lines.Append(varLine); memo1.Lines.Append('begin'); for loop := 0 to theList.Count-1 do begin defLine := #9+theList.Names[loop]+' := '+#39+theList.ValueFromIndex[loop]+#39+#59; memo1.Lines.Append(defLine); end; memo1.Lines.Append('end;'); theList.Free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz