![]() |
Delphi-Version: 2005
Operator ist auf diesen operatortyp nicht anwendbar
Hallo
ich muss bis morgen ein programm für die schule schreiben das die rechtschreibung eines textes überprüft, aber ich bekomme andauernd die meldung "Operator ist auf diesen operatortyp nicht anwendbar" weiß jemand warum? (ich würde mich über schnelle antworten freuen, ihr seht ja ich bin etwas unter zeitdruck :-D) hier mein code:
Delphi-Quellcode:
EDIT: ich benutze übrigens delphi 7
procedure TFormrechtschreibung.Rechtschreibungpruefen;
var woerterbuch: Tstringlist; Zeile: string; wort: shortstring; wortanfang, wortende, s, r : integer; begin woerterbuch:=Tstringlist.create; woerterbuch.LoadFromFile('wörterbuch.txt'); wortanfang:=1; wortende:=1; Zeile:=Form1.Memo.Lines[i]; for r:=1 to Length(Zeile) do begin wort:=''; if Zeile[wortende] in [char( 32)..char( 64)] or if Zeile[wortende] in [char( 91)..char( 96)] or if Zeile[wortende] in [char(123)..char(126)] or if Zeile[wortende] in [char(128)..char(137)] or if Zeile[wortende] in [char(143)..char(153)] or if Zeile[wortende] in [char(160)..char(191)] or if Zeile[wortende]=char(139) or if Zeile[wortende]=char(141) or if Zeile[wortende]=char(155) or if Zeile[wortende]=char(157) or if zeile[wortende]=char(215) or if zeile[wortende]=char(247) then begin wort:=Copy(Zeile,Wortanfang,Wortende-1); for s:=0 to Woerterbuch.count-1 do begin if wort<>woerterbuch[s] then begin Edfalscheswort.Text:=wort; exit; end; //von if end; //von for end else wortende:=wortende+1; if wortende=Length(Zeile) then i:=i+1; end;//von if end; //von for end; |
AW: Operator ist auf diesen operatortyp nicht anwendbar
In welcher Zeile?
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
Delphi-Quellcode:
und
wortende:=wortende+1;
Delphi-Quellcode:
i:=i+1;
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
Wo ist i deklariert?
WEs sollte so reichen
Delphi-Quellcode:
Aber ich vermute der Fehler ist woanders
if Zeile[wortende] in [char( 32)..char( 64)] or Zeile[wortende] in [char( 91)..char( 96)] ...
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
Zitat:
Was machen denn die vielen IFs mitten drin? Und nicht die Klammern vergessen.
Delphi-Quellcode:
if (Zeile[wortende] in [char( 32)..char( 64)])
or (Zeile[wortende] in [char( 91)..char( 96)]) or (Zeile[wortende] in [char(123)..char(126)]) or (Zeile[wortende] in [char(128)..char(137)]) or (Zeile[wortende] in [char(143)..char(153)]) or (Zeile[wortende] in [char(160)..char(191)]) or (Zeile[wortende]=char(139)) or (Zeile[wortende]=char(141)) or (Zeile[wortende]=char(155)) or (Zeile[wortende]=char(157)) or (zeile[wortende]=char(215)) or (zeile[wortende]=char(247)) then
Delphi-Quellcode:
Und ansonsten würde ich dir noch anraten, dich noch etwas um eine "vernünftige" Einrückung zu kümmern,
if Zeile[wortende] in [char( 32)..char( 64), char( 91)..char( 96),
char(123)..char(126), char(128)..char(137), char(143)..char(153), char(160)..char(191), char(139), char(141), char(155), char(157), char(215), char(247)] then dann würden so Kommentare ala
Delphi-Quellcode:
erübrigen und man hätte etwas mehr Überblick.
//von for
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
@mkinzler:i ist eine globale veriable
und ich will ja alles was kein buchstabe ist abdecken... edit: danke @himitsu, funktioniert jetzt, aber beim dem end; ganz am ende der procedure krieg ich jetzt ein '.' erwartet aber ';' gefunden edit2 (tut mir leid für die vielen edits): hab ein end zu viel, habs rausgelöscht un bekomme jetzt bei dem else von der ganz großen if schleife ein "end erwartet aber else gefunden" |
AW: Operator ist auf diesen operatortyp nicht anwendbar
Zitat:
Zitat:
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
PS: Wo wird woerterbuch eigentlich wieder freigegeben?
(ich sehe da ein nettes Speicherleck und von Resourcenschutzblöcken ala Try-Finally dagegen nichts) Zitat:
Zähle mal deine BEGIN und die jeweils zugehörigen END durch. Wobei eine gute Codeformatierung das Durchzählen eigentlich überflüssig machen würde, da man solche Fehler oftmals sofort erkennen würde. |
AW: Operator ist auf diesen operatortyp nicht anwendbar
Zitat:
Zitat:
@himitsu: wie freigeben? und die anzahl der ends und begins hab ich schon 10 mal gezählt, die stimmen |
AW: Operator ist auf diesen operatortyp nicht anwendbar
Oder man Verwendet einen AddIn der das farblich virtualisiert wie z.B. Castalia oder CnWizards
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
Zitat:
Delphi-Quellcode:
Habe es mal mit einrücken versucht.
procedure TFormrechtschreibung.Rechtschreibungpruefen;
begin woerterbuch:=Tstringlist.create; woerterbuch.LoadFromFile('wörterbuch.txt'); wortanfang:=1; wortende:=1; Zeile:=Form1.Memo.Lines[i]; for r:=1 to Length(Zeile) do begin wort:=''; if (...) then begin wort:=Copy(Zeile,Wortanfang,Wortende-1); for s:=0 to Woerterbuch.count-1 do begin if wort<>woerterbuch[s] then begin Edfalscheswort.Text:=wort; exit; end; //von if end; //von for end else wortende:=wortende+1; if wortende=Length(Zeile) then i:=i+1; //end;//von if end; //von for end; Solltest Du dir auch einmal angewöhnen. Grüße Klaus |
AW: Operator ist auf diesen operatortyp nicht anwendbar
Zitat:
Delphi-Quellcode:
Und dann PruefString statt
procedure TFormrechtschreibung.Rechtschreibungpruefen( PruefString: string);
Delphi-Quellcode:
verwenden.
Zeile:=Form1.Memo.Lines[i];
Zitat:
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
bin mir grade nicht sicher, muss vor ein else bei einer if (wie heißt denn das wenn nicht scheleife?) ein edn und dann nach der else-prozedur noch eins oder nur das nach der else-prozedur?
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
Zitat:
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
'ne kleine Umformatierung meint da was Anderes:
Delphi-Quellcode:
procedure TFormrechtschreibung.Rechtschreibungpruefen;
var woerterbuch: TStringList; Zeile: string; wort: shortstring; wortanfang, wortende, S, R: Integer; begin woerterbuch := TStringList.Create; woerterbuch.LoadFromFile('wörterbuch.txt'); wortanfang := 1; wortende := 1; Zeile := Form1.Memo.Lines[i]; for R := 1 to Length(Zeile) do begin wort := ''; if Zeile[wortende] in ... then begin ... end else wortende := wortende + 1; if wortende = Length(Zeile) then i := i + 1; end; // von if // nee, vom for end; // von for // und hier von der Prozedur end; // das hier gehört nicht mehr dazu |
AW: Operator ist auf diesen operatortyp nicht anwendbar
Ich meinte in etwa so:
Delphi-Quellcode:
ist das selbe wie
if Ziffer in [ 1, 2, 4, 5, 6, 8, 9] then ...
Delphi-Quellcode:
if ziffer not in [ 3, 7] then ...
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
@mkinzler: Du meinst bestimmt:
Delphi-Quellcode:
if not (ziffer in [ 3, 7]) then ...
|
AW: Operator ist auf diesen operatortyp nicht anwendbar
@himitsu: oh mist, hab das end; das zuviel war an der falschen stelle gesucht (vor dem else). jetzt funktioniert alles, dnakeschön =):thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:46 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