norminalphrasenanalyse?
Ich will gar nicht wissen was das ist. Oder...? Nein!
Kommt natürlich drauf an was das für ein Text ist. Ich geh mal davon aus, dass es ein normal lesbarer Text mit Wörtern ist. Handelt es sich ausschließlich um natürliche Zahlen? Wohl nicht.
Ich hab mal ein ähnliches Problem gehabt und es etwa so gelöst:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function interprete(token: string): byte; var c: integer; begin if token = '' then begin result := END_OF_LINE; exit; end;
result := NUMBER; for c := 1 to length(token) + 1 do begin if c = length(token) + 1 then exit; if (c = 1) and (token[c] in ['-','+']) then break; if (token[c] in ['0'..'9']) = false then break; end;
result := TEXTSTRING;
end; |
Der Funktion habe ich ein Token übergeben, also ein "Wort". Tokens werden durch andere Zeichen begrenzt (Satz-, Leerzeichen und Klammern). Das lässt sich auch alles durch zeichenweise Überprüfungen erledigen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| function getToken(index: integer; com: string): string; var i, c: integer; tm: boolean; qm: boolean; begin i := 1; qm := false; result := ''; for c := 1 to length(com) do begin if (com[c] = '"') then if qm = false then qm := true else qm := false;
if ((com[c] = ' ') or (com[c] = chr(8))) and (qm = false) then begin if tm = true then inc(i); tm := false end else tm := true;
if (tm = true) and (com[c] <> '"') and (index = i) then result := result + com[c]; end; end; |
In deinem Fall musst Du das wohl noch erweitern, meine Funktionen waren für eine einfache Skriptsprache gedacht und nicht für beliebigen Text. Außerdem behandelt die Routine "strings wie diesen" als ein Token, was bei dir ja auch nicht sein muss.
Eine leichtere Lösung weiß ich leider nicht.