Error: Ordinal expression expected

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
wp_xyz
Beiträge: 4889
Registriert: Fr 8. Apr 2011, 09:01

Re: Error: Ordinal expression expected

Beitrag von wp_xyz »

Das ist bei Delphi anders. Auf einem Formular mit TEdit für die Zeicheneingabe und TButton für die Prüfung verhalt sich folgender Code absolut normal:

Code: Alles auswählen

 
procedure TForm1.Button1Click(Sender: TObject);
var
  ch: Char;
begin
  if Edit1.Text = '' then
    exit;
  ch := Edit1.Text[1];
  case ch of
    'ä': ShowMessage('klein');
    'Ä': ShowMessage('groß');
    else ShowMessage('etwas anderes...');
  end;
end;

Socke
Lazarusforum e. V.
Beiträge: 3158
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Error: Ordinal expression expected

Beitrag von Socke »

Jole hat geschrieben:Geht nur die Abfrage in Ordnung oder wertet Delphi das auch aus? In Lazarus kann ich den Typ auch auf UTF8String einstellen, Kombilieren und Starten geht dann auch in Ordnung, Ausgewertet wird da aber nix!

Die Funktion ReadLn() liest die Eingabe von der Console wie sie ist. Ohne Änderung ist das auf deutschen Systemen die Codepage 850. In Lazarus verfasst du deinen Quelltext in der Regel in UTF-8.

Lösungsmöglichkeiten:
  • Du stellst deinen Quelltext auf Codepage 850 um (Windows-1252 sollte ebenfalls funktionieren). Das geht im Quelltexteditor über das Kontextmenü/Rechtsklick. Dann passt das 'ä' auch wieder in eine Variable vom Typ char.
  • Nach ReadLn() konvertiertst du die Eingabe nach UTF-8 mit der Funktion ConsoleToUTF8 aus der Unit FileUtil.
  • Du stellst die Codepage auf UTF-8. Das geht mit dem Befehl chcp 65001, muss aber in der cmd.exe eingegeben werden und ist für eigene Programme eher ungeeignet. Man kann die Einstellungen auch als Systemstandard setzen, fängt sich damit aber Probleme ein, da viele Programme dies nicht erwarten.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Error: Ordinal expression expected

Beitrag von theo »

wp_xyz hat geschrieben:Kein Delphi verwendet UTF8. Aber trotzdem hast du recht: Delphi ab, ich glaube, 2007 verwendet UTF16. Damit ist 'ä' z.B. wieder ein char, und die case-Abfrage geht in Ordnung (ich hab's mit XE2 getestet).

Naja, es ist aber dann bei Delphi ein Alias auf den 16 bit Char (WideChar) und nicht auf den 8-bit Char (AnsiChar).
Dieser Char entspricht also nicht dem FPC Char (es sei denn, man hätte das zwischenzeitlich geändert ohne mich zu fragen ;-) ).

Nur damit hier nicht die Ansicht aufkommt, ein UTF-16 Umlaut passe in einen Byte-Char.

Antworten