AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Operator ist auf diesen operatortyp nicht anwendbar
Thema durchsuchen
Ansicht
Themen-Optionen

Operator ist auf diesen operatortyp nicht anwendbar

Ein Thema von Demon666 · begonnen am 16. Jun 2010 · letzter Beitrag vom 16. Jun 2010
Antwort Antwort
Demon666

Registriert seit: 16. Jun 2010
21 Beiträge
 
Delphi 7 Personal
 
#1

Operator ist auf diesen operatortyp nicht anwendbar

  Alt 16. Jun 2010, 20:34
Delphi-Version: 2005
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 )

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
Simon

Geändert von SirThornberry (16. Jun 2010 um 20:40 Uhr) Grund: Code-Tags durch Delphi-Tags ersetzt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Operator ist auf diesen operatortyp nicht anwendbar

  Alt 16. Jun 2010, 20:44
In welcher Zeile?
Markus Kinzler
  Mit Zitat antworten Zitat
Demon666

Registriert seit: 16. Jun 2010
21 Beiträge
 
Delphi 7 Personal
 
#3

AW: Operator ist auf diesen operatortyp nicht anwendbar

  Alt 16. Jun 2010, 20:46
wortende:=wortende+1; und
i:=i+1;
Simon
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Operator ist auf diesen operatortyp nicht anwendbar

  Alt 16. Jun 2010, 20:49
Wo ist i deklariert?
WEs sollte so reichen
   if Zeile[wortende] in [char( 32)..char( 64)] or Zeile[wortende] in [char( 91)..char( 96)] ... Aber ich vermute der Fehler ist woanders
Markus Kinzler
  Mit Zitat antworten Zitat
Demon666

Registriert seit: 16. Jun 2010
21 Beiträge
 
Delphi 7 Personal
 
#5

AW: Operator ist auf diesen operatortyp nicht anwendbar

  Alt 16. Jun 2010, 20:55
@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"
Simon

Geändert von Demon666 (16. Jun 2010 um 21:00 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Operator ist auf diesen operatortyp nicht anwendbar

  Alt 16. Jun 2010, 20:59
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
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#7

AW: Operator ist auf diesen operatortyp nicht anwendbar

  Alt 16. Jun 2010, 21:02
PS: Wo wird woerterbuch eigentlich wieder freigegeben?
(ich sehe da ein nettes Speicherleck und von Resourcenschutzblöcken ala Try-Finally dagegen nichts)

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.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Jun 2010 um 21:04 Uhr)
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Operator ist auf diesen operatortyp nicht anwendbar

  Alt 16. Jun 2010, 21:08
".. if schleife .."
???




Delphi-Quellcode:
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;
Habe es mal mit einrücken versucht.
Solltest Du dir auch einmal angewöhnen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.342 Beiträge
 
Delphi 12 Athens
 
#9

AW: Operator ist auf diesen operatortyp nicht anwendbar

  Alt 16. Jun 2010, 20:52
Zitat:
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 //von for erübrigen und man hätte etwas mehr Überblick.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (16. Jun 2010 um 20:57 Uhr)
  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 14:48 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