AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

String richtig zerlegen

Ein Thema von bundy · begonnen am 5. Sep 2008 · letzter Beitrag vom 5. Sep 2008
Antwort Antwort
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#1

String richtig zerlegen

  Alt 5. Sep 2008, 02:30
Hi DP

wie kann ich folgenden String richtig parsen.

Code:
{"class":"Shaman","spec":"Enhancement","role":"DPS","talents":"0\/45\/16","gearraw":"226.63","gearbuffed":"250.99","warncount":1,"rawpos":527,"buffpos":600}
rauskommen soll dann

Delphi-Quellcode:
var
class,spec,role,talents :string;
begin
class:='Shaman';
end;
Es kann aber vorkommen das sich der Parsestring erweitert, sprich es können Werte dazukommen.
Ob die nun vorne oder hinten angereiht werden sei dahingestellt.

Wie kann ich sowas am schönsten lösen ?

lg
bundy
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: String richtig zerlegen

  Alt 5. Sep 2008, 03:47
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]) = 'classthen 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;
RegExpr
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: String richtig zerlegen

  Alt 5. Sep 2008, 07:34
'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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: String richtig zerlegen

  Alt 5. Sep 2008, 07:36
Er wird es ganz bestimmt.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von bundy
bundy

Registriert seit: 24. Mai 2003
Ort: Eisenstadt
438 Beiträge
 
Delphi 2007 Architect
 
#5

Re: String richtig zerlegen

  Alt 5. Sep 2008, 10:26
hy cool, den code muss ich mal verarbeiten DANKE
+++Glaube keiner Statistik, die du nicht selbst getürkthast.++++
********************
Ein anonymer Statistiker. *
********************
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#6

Re: String richtig zerlegen

  Alt 5. Sep 2008, 13:52
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;
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz