AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Fehler in Case-Konstrukt - E2030 Doppelte Case-Label
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler in Case-Konstrukt - E2030 Doppelte Case-Label

Ein Thema von hschmid67 · begonnen am 8. Sep 2019 · letzter Beitrag vom 8. Sep 2019
 
Redeemer
Online

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
1.128 Beiträge
 
Delphi 2009 Professional
 
#2

AW: Fehler in Case-Konstrukt - E2030 Doppelte Case-Label

  Alt 8. Sep 2019, 08:42
Drei Probleme hier: 1. Dein Selektor hat einen anderen Typ als deine Labels. Irgendwas wird hier also implizit gecastet. Dürfte der Compiler auch anmerken. Spoiler: Wie man gleich sieht, werden deine AnsiChar-Labels implizit auf den WideChar-Typ des Selektors gecastet.
2. Zeichenkonstanten sind nicht so, wie man sich das vorstellt. Der Compiler castet nun also deine CP1252-Codepoints in den Labels auf UTF-16-Codepoints, um sie mit dem UTF-16-Codepoint im Selektor zu vergleichen. Das sieht dann so aus:
Delphi-Quellcode:
  for i := 1 to lStr.Length do
  begin
    case Ord(lStr[i]) of
        0 .. 44 : ;
       45 : ;
       46 .. 47 : ;
       48 .. 57 : ;
       58 .. 64 : ;
       65 .. 90 : ;
       91 .. 96 : ;
       97 .. 122 : ;
      123 .. 8240 : ;
      352 : ; // Hier der Fehler, 352 ist ja bereits in 123..8240 abgedeckt
    end;
  end;
Würden wir bis #138 zählen (statt #137) sieht es anders aus:
Delphi-Quellcode:
  for i := 1 to lStr.Length do
  begin
    case Ord(lStr[i]) of
        0 .. 44 : ;
       45 : ;
       46 .. 47 : ;
       48 .. 57 : ;
       58 .. 64 : ;
       65 .. 90 : ;
       91 .. 96 : ;
       97 .. 122 : ;
      123 .. 352: ; // Hier KEIN Fehler
    end;
  end;
3. #129 und vier weitere können nicht auf WideChar gecastet werden.
Also bitte in Case-Anweisungen keine Äpfel mit Birnen vergleichen und überhaupt Strings nicht als Ersatz für Delphi-Referenz durchsuchenTBytes verwenden. Wenn's unbedingt sein muss, je nach Situation AnsiString oder RawByteString verwenden.
Janni
2005 PE, 2009 PA, XE2 PA

Geändert von Redeemer ( 8. Sep 2019 um 08:45 Uhr)
  Mit Zitat antworten Zitat
 


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:36 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