Entwickler-Ecke
Sonstiges (Delphi) - Textdatei nach Zahlen durchsuchen
Easy - Mi 22.11.06 14:45
Titel: Textdatei nach Zahlen durchsuchen
hi
ich bräuchte mal euere hilfe.
ich muss für die schule ein programm zur norminalphrasenanalyse machen und ich hab aber nicht viel ahnung davon.
wie kann man denn aus einer textdatei die man in ein memo geladen hat jetzt alle zahlen entfernen so das nur noch die wörter da sind?
also ich hab die txt jetzt schon in ein memo geladen und jetzt wollte ich auf ein button klick legen, das es mir nur noch die wörter ohnen die zahlen in ein 2 memo schreibt.
ich hoffe ihr könnt mir helfen
lg easy
monster - Mi 22.11.06 15:30
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.
Dragonclaw - Mi 22.11.06 15:40
Uff, das ist aber ziemlich kompliziert....
Geht auch einfacher und auch leicher zu verstehen.
Problem ist nur das die Kommatar nicht mit rausgelöscht werden, da die ja nicht nur in Zahlen vorkommen sonder auch in Sätzen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure TForm1.Button1Click(Sender: TObject); var hilfe,ohnenummer :string; i,j : integer; begin for j := 1 to (Memo1.Lines.count) do begin ohnenummer := ''; hilfe :=Memo1.Lines[j-1]; for i := 1 to length(hilfe) do if (((ord(hilfe[i]) < 48) OR (ord(hilfe[i]) > 57)) then ohnenummer := ohnenummer + hilfe[i]; Memo1.Lines[j-1] := ohnenummer; end; end; |
Easy - Mi 29.11.06 22:49
Danke für euere Hilfe!
Delete - Do 30.11.06 00:28
hallo easy,
hast mal 'n bischen code... damit man sieht wie deine denkstrukturen sind.. danke...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!