isdigit bei FPC mit grossem Umweg

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

isdigit bei FPC mit grossem Umweg

Beitrag von Mathias »

Ich bin vorhin auf die Funktion "isdigit" gestossen. Egal, ob ich es selbst mache, oder über die clib, das ganze ist sehr kompakt und einfach.
Für fpc wird die Funktion in der unit "Character" zur Verfügung gestellt. Da habe ich aus neugier rein geguckt und da ist mit aufgefallen, das es dort sehr komplex gemacht wird.
So wie es scheint, unterstützt, fpc komplexe Zeichensätze.

Code: Alles auswählen

uses
  Character,  ctypes;

const
  lib_stdio = 'c';
var
  i: integer;

  function c_isdigit(i: cint): Boolean32; cdecl; external lib_stdio Name 'isdigit';

  function my_isdigit(ch: char): boolean;
  begin
    Result := ch in ['0'..'9'];
  end;

begin
  for i := 32 to 126 do begin
    WriteLn('ch:', char(i), '  c:', c_isdigit(i): 6, '  my:', my_isdigit(char(i)): 6, '  fpc:', IsDigit(char(i)): 6);
  end;
end.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: isdigit bei FPC mit grossem Umweg

Beitrag von theo »

Man nennt es Unicode.
Es gibt auf der Welt noch mehr Numbers oder Digits als 0..9
Z.B. römische Zahlen.

Code: Alles auswählen

uses ...Character;
...
var WC:WideChar;
..
WC:=UTF8Decode('Ⅺ')[1];
Writeln(TCharacter.IsNumber(WC));
Writeln(TCharacter.IsDigit(WC));     

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: isdigit bei FPC mit grossem Umweg

Beitrag von Mathias »

Ich habe es probiert, es wird 2x FALSE ausgespuckt.
Wie geht dies mit den römischen Zahlen ?
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: isdigit bei FPC mit grossem Umweg

Beitrag von theo »

Mathias hat geschrieben: So 14. Mai 2023, 14:12 Ich habe es probiert, es wird 2x FALSE ausgespuckt.
Wie geht dies mit den römischen Zahlen ?
Nein, es sollte TRUE FALSE sein.
Für UTF8Decode muss natürlich UTF8 vorausgesetzt sein in der Quelle, wie es bei einer normalen Lazarus Anwendung der Fall ist.

Sonst probiere es so:

Code: Alles auswählen

WC:=WideChar($2165);  
https://www.compart.com/de/unicode/U+2165

Mathias
Beiträge: 6910
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: isdigit bei FPC mit grossem Umweg

Beitrag von Mathias »

Jetzt ist der Fall klar du hast ein ein utf8 Zeichen genommen und ich habe ein 'X'+'I' zusammmengesetzt.

Dazu habe ich noch folgendes gefunden: https://schrift-generator.com/sonderzei ... ahlen.html

So wie es aussieht, gibt es für 1-12 fertige Unicode-Zeichen, und für höheres, muss man auch zusammensetzen.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

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

Re: isdigit bei FPC mit grossem Umweg

Beitrag von theo »

Mathias hat geschrieben: So 14. Mai 2023, 15:12 Jetzt ist der Fall klar du hast ein ein utf8 Zeichen genommen und ich habe ein 'X'+'I' zusammmengesetzt.
Copy&Paste kennst du aber schon? :mrgreen:

Antworten