Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Inkompitable Typen im Bezug auf Ord(Str) als Spaltenangabe (https://www.delphipraxis.net/111905-inkompitable-typen-im-bezug-auf-ord-str-als-spaltenangabe.html)

Chrissi91 11. Apr 2008 14:13


Inkompitable Typen im Bezug auf Ord(Str) als Spaltenangabe
 
Hi,

ich grübel schon seit gestern Abend und bin immer noch der Meinung, dass alles eigentlich stimmt.

Ich habe 2 Arrays.

Stat: Array[1..26, 1..2] of String; (lokal)
Table: Array[1..1000, 1..20] of String; (global)

Es geht nur um dieses Stückchen Code:

Delphi-Quellcode:
Stat[Ord(Table[J, Col])-64, 2] := ...
J ist vom Typ Integer als lokale Variable, die als Zähler der For-Schleife dient und Col ist ein Parameter meiner Funktion, auch Integer.

Wichtig: Im Array "Table" sind nur Großbuchstaben! D.h.beim A will ich eine 1 kriegen (deshalb minus 64), bei Z eine 26.

Kommentar: [Error] Main.pas(134): Incompatible types

Ord() liefert Integer und erwartet einen String. Sollte doch eigentlich alles okay sein.

Wenn ich jetzt mache:

Delphi-Quellcode:
Stat[Ord(StrToInt(Table[J, Col]))-64, 2]
Diese Zeile macht keinen Sinn, aber Delphi kompiliert munter, ohne zu meckern. Erst beim Ausführen dieser Zeile sagt er mir, dass 'W' nicht in Integer umgewandelt werden könne. Das ist ja auch logisch. Aber warum will er für Ord() Integer haben? Ord macht doch aus einem Buchstaben den Ascii-Code ...

Jetzt kommt es in meinen Augen noch besser. Ich änder kaum etwas im Code, sondern mach ihn ein bisschen kürzer:

Delphi-Quellcode:
Stat[Ord(Table[1, 1])-64, 2]
Selbst Fehler ... Okay ...

Delphi-Quellcode:
Stat[Ord('W')-64, 2]
Jetzt sagt er auf einmal alles okay. Dabei ist doch Table vom Typ String ...

Bitte helft mir ... :pale:

Muetze1 11. Apr 2008 14:23

Re: Inkompitable Typen im Bezug auf Ord(Str) als Spaltenanga
 
Du übergibst Ord() einen ganzen String anstatt nur ein Buchstaben. Delphi-Referenz durchsuchenOrd() will kein String, wie du behauptest, das ist falsch. Ein String ist kein Ordinaltyp, ein Zeichen schon. Was sollte denn Ord() zurückliefern, wenn du ihm "Das ist ein ganz langer String" gibst? Die Quersumme der Zeichen?

Bei deinem Ord('W') ist es kein String, sondern du definierst ein Zeichen.

Chrissi91 11. Apr 2008 14:24

Re: Inkompitable Typen im Bezug auf Ord(Str) als Spaltenanga
 
da is aber nur ein buchstabe drin. meinst du ich soll das array vom typ char machen?

Muetze1 11. Apr 2008 14:27

Re: Inkompitable Typen im Bezug auf Ord(Str) als Spaltenanga
 
Zitat:

Zitat von Chrissi91
da is aber nur ein buchstabe drin. meinst du ich soll das array vom typ char machen?

Da können aber auch 20 Buchstaben drinne sein. Da der Inhalt der Variablen nur zur Laufzeit feststeht, kann Delphi dies entsprechend nicht beim Erstellen des Programms wissen. Somit musst du angeben welches Zeichen du meinst.

Bbommel 11. Apr 2008 14:29

Re: Inkompitable Typen im Bezug auf Ord(Str) als Spaltenanga
 
Wenns dir eh immer nur auf den ersten Buchstaben ankommt, könnte doch (ungetestet) das hier helfen:

Delphi-Quellcode:
Stat[Ord(Table[J, Col][1])-64, 2] := ...
Liefert ord ein Char und macht den Compiler glücklicher.

(edit: Wobei char wohl auch der passendere Datentyp für dein Array wäre, wenn da eh immer nur chars drinstehen...?)

Klaus01 11. Apr 2008 14:29

Re: Inkompitable Typen im Bezug auf Ord(Str) als Spaltenanga
 
.. es schaut zwar etwas merkwürdig aus:

Delphi-Quellcode:
Stat[Ord(Table[J, Col][1])-64, 2] := ...
sollte aber funktionieren.

Besser wäre ein Array of Char.

Grüße
Klaus

Chrissi91 11. Apr 2008 14:32

Re: Inkompitable Typen im Bezug auf Ord(Str) als Spaltenanga
 
Zitat:

Zitat von Klaus01
.. es schaut zwar etwas merkwürdig aus:

Delphi-Quellcode:
Stat[Ord(Table[J, Col][1])-64, 2] := ...
sollte aber funktionieren.

Besser wäre ein Array of Char.

Grüße
Klaus

Cool, danke. :-D Wieder was neues gelernt. Die Möglichkeit nen [1] hinterzumachen kannte ich noch gar nicht. Ich wollte es erst mit Copy versuchen :D

DeddyH 11. Apr 2008 14:37

Re: Inkompitable Typen im Bezug auf Ord(Str) als Spaltenanga
 
Copy wäre auch nicht gegangen, da der Rückgabewert ja wieder ein String wäre.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:30 Uhr.

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