Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Operator ist auf diesen operatortyp nicht anwendbar (https://www.delphipraxis.net/152266-operator-ist-auf-diesen-operatortyp-nicht-anwendbar.html)

Demon666 16. Jun 2010 20:34

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:
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;
EDIT: ich benutze übrigens delphi 7

mkinzler 16. Jun 2010 20:44

AW: Operator ist auf diesen operatortyp nicht anwendbar
 
In welcher Zeile?

Demon666 16. Jun 2010 20:46

AW: Operator ist auf diesen operatortyp nicht anwendbar
 
Delphi-Quellcode:
wortende:=wortende+1;
und
Delphi-Quellcode:
i:=i+1;

mkinzler 16. Jun 2010 20:49

AW: Operator ist auf diesen operatortyp nicht anwendbar
 
Wo ist i deklariert?
WEs sollte so reichen
Delphi-Quellcode:
   if Zeile[wortende] in [char( 32)..char( 64)] or Zeile[wortende] in [char( 91)..char( 96)] ...
Aber ich vermute der Fehler ist woanders

himitsu 16. Jun 2010 20:52

AW: Operator ist auf diesen operatortyp nicht anwendbar
 
Zitat:

Delphi-Quellcode:
if ... or if ... or if ... then

Tja, die liebe Delphi-Syntax.
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:
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
Und ansonsten würde ich dir noch anraten, dich noch etwas um eine "vernünftige" Einrückung zu kümmern,
dann würden so Kommentare ala
Delphi-Quellcode:
//von for
erübrigen und man hätte etwas mehr Überblick.

Demon666 16. Jun 2010 20:55

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"

mkinzler 16. Jun 2010 20:59

AW: Operator ist auf diesen operatortyp nicht anwendbar
 
Zitat:

@mkinzler:i ist eine globale veriable
Aud derartige globale Variablen sollte man verzichten. Übergebe den Index als Parameter der Prozedur/Funktion
Zitat:

und ich will ja alles was kein buchstabe ist abdecken...
Dann würde ich die Abfragelogik umdrehen

himitsu 16. Jun 2010 21:02

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:

Zitat von Demon666 (Beitrag 1029490)
aber beim dem end; ganz am ende der procedure krieg ich jetzt ein '.' erwartet aber ';' gefunden

Stichwort Codeformatierung (vorallem die Einrückung).
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.

Demon666 16. Jun 2010 21:04

AW: Operator ist auf diesen operatortyp nicht anwendbar
 
Zitat:

Zitat von mkinzler (Beitrag 1029491)

Übergebe den Index als Parameter der Prozedur/Funktion

wie mach ich das?

Zitat:

Zitat von mkinzler (Beitrag 1029491)
Dann würde ich die Abfragelogik umdrehen

was meinst du mit umdrehen?


@himitsu: wie freigeben? und die anzahl der ends und begins hab ich schon 10 mal gezählt, die stimmen

mkinzler 16. Jun 2010 21:05

AW: Operator ist auf diesen operatortyp nicht anwendbar
 
Oder man Verwendet einen AddIn der das farblich virtualisiert wie z.B. Castalia oder CnWizards


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:34 Uhr.
Seite 1 von 2  1 2      

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