Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   angeblich doppeltes Case-Label, aber ich find keines? (https://www.delphipraxis.net/130228-angeblich-doppeltes-case-label-aber-ich-find-keines.html)

himitsu 5. Mär 2009 09:34


angeblich doppeltes Case-Label, aber ich find keines?
 
Delphi-Quellcode:
Case C of
  #$09, #$0A, #$0D, #$20..#$7E, #$85, #$A0..#$D7FF, #$E000..#$FDD0, #$FDDF..#$FFFD: Result := True;
  Else Result := False;
End;
Zitat:

[DCC Fehler] MyXML.pas(1144): E2030 Doppeltes Case-Label
Also gemeckert wird bei #$A0..#$D7FF, aber da ist doch nichts doppelt?
Oder überseh ich nur etwas :gruebel:

C = WideChar


und nicht über das "sinnlose" Case wundern, aber versucht ihr mal ohne großen Overhead ein C in [...] für Unicode hinzubekommen :angel2:

Angel4585 5. Mär 2009 09:40

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
hast du mal anstatt $0A, $000A usw probiert?

SirThornberry 5. Mär 2009 09:41

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
funktioniert das mit dem # überhaupt vor widechars? Ich würde vermuten das generell zu normalem char damit gewandelt wird. Ich würde wie mein Vorposter auch das # weg lassen und das c zu einem ordinalen Typen casten um zu sehen ob es dann funktioniert.

himitsu 5. Mär 2009 09:48

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
wenn ich # weglaß, dann müßte ich C in einen Integer convertieren und das wollt ich nicht ._.

und #$00A0..#$D7FF bringt auch nichts, es ging ja schonmal, nur jetzt nimmer

PS: so geht es, aber nachdem ich den Zeichensatz entsprechende XML 1.1 weiter eingeschränkt hab, geht es plötzlich nicht mehr :wall:

dieses ging noch:
Delphi-Quellcode:
xtChar: Case C of
          #$09, #$0A, #$0D, #$20..#$D7FF, #$E000..#$FDD0, #$FDDF..#$FFFD: Result := True;
          Else Result := False;
        End;
ich könnte das $ weglassen, daber mit Dezimalzahlen ist es schwerer wartbar, da die Spec sozusagen etwa so [#x00A0-#xD7FF] aussieht

SirThornberry 5. Mär 2009 09:53

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
Zitat:

wenn ich # weglaß, dann müßte ich C in einen Integer convertieren und das wollt ich nicht ._.
Es geht ja auch nicht darum das du es dann so lassen sollst sondern darum den Fehler zu finden. Wenn es gecastet zu Integer funktioniert muss man wo anders ansetzen als wenn es da auch nicht funktioniert.

himitsu 5. Mär 2009 09:59

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
ochso ^^

also nach Word gecastet und ohne # geht es. :shock:

und auch ein splitten in AnsiChar/WideChar bringt nichts, da wird jetzt nur bei #$0100..#$D7FF gemeckert
Delphi-Quellcode:
#$A0..#$FF, #$0100..#$D7FF

[add]
ach ja, beim tauschen von Ansi und Unicode, dann meckert er jetzt bei #$85

Delphi-Quellcode:
#$0100..#$D7FF, #$E000..#$FDD0, #$FDDF..#$FFFD, #$09, #$0A, #$0D, #$20..#$7E, #$85, #$A0..#$FF: Result := True;
:gruebel:

und wenn ich es wieder umdreh und die 85 auskommentier, dann geht es.

Ja gut, die #$85 ist neu und entspricht keinem offitziellen Char, aber warum da Delphi dann dabei durchdreht?

Angel4585 5. Mär 2009 10:04

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
geht das in Delphi 2005 noch nicht? weil ich bekomm da ne Meldung inkompatible Typen char und widechar :shock:

edit: was sind die chars eigentlich ausgeschrieben?

Die Muhkuh 5. Mär 2009 10:16

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
Hi,

fragt mich nicht warum, ich hab es auch nur durch ausprobieren heraus gefunden, aber wenn Du statt #$85 #$0085 funktioniert es.

Angel4585 5. Mär 2009 10:26

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
ich hatte doch gesagt das er diese schreibweise nehmen soll un er meinte es geht trotzdem nicht :gruebel:
Ich meinte die Schreibweise natürlich für alle zweistelligen

$85 ist vom Typ her Char
$0085 WideChar
wenn ich das recht interpretiere

Zoot 5. Mär 2009 10:28

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
Seltsam.
Kann keines der Probleme nachvollziehen (D2007);
Auch die Version mit #$85 läuft bei mit problemlos.

himitsu 5. Mär 2009 10:31

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
Zitat:

Zitat von Angel4585
ich hatte doch gesagt das er diese schreibweise nehmen soll un er meinte es geht trotzdem nicht :gruebel:
Ich meinte die Schreibweise natürlich für alle zweistelligen

$85 ist vom Typ her Char
$0085 WideChar
wenn ich das recht interpretiere

nein, delphi ignoriert führende Nullen

hab es ja versucht und es ging nicht

sonst müßte #$00000085 ja ein UCS4-Char sein und nicht mehr in einen Wide-Char passen

hab hier nur D7 und D2009 (vielleicht sollte ich nochmal des Turbodelphi draufmachen lassen)
- in D7 geht's



[add]
selbst dises slitten brachte erwartungsgemäß nichts
Delphi-Quellcode:
xtChar: Case C of
          #$09, #$0A, #$0D, #$20..#$7E, #$85, #$A0..#$FF: Result := True;
          #$0100..#$D7FF, #$E000..#$FDD0, #$FDDF..#$FFFD: Result := True;
          Else Result := False;
        End;
hab mir aber erstmal so behelfen können :angel:
Delphi-Quellcode:
Case Typ of
  xtChar: Case C of
            #$09, #$0A, #$0D, #$20..#$7E, #$A0..#$FF, #$0100..#$D7FF, #$E000..#$FDD0, #$FDDF..#$FFFD: Result := True;
            Else Result := (C = #$85);
          End;

Die Muhkuh 5. Mär 2009 10:39

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
Hi,

also wie ich sagte oben, so funktionierte es bei mir in Delphi 2009.

himitsu 5. Mär 2009 10:48

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
So, selbst ein Neustart bringt nichts,
aber ich hab ja erstmal 'ne Lösung.

Wenn ich dran denk, werd ich's in nächster Zeit nochmal probieren.


D2009 mit allen Updates (aber wie schonmal irgendwo gesagt, seit dem letzen Update hab ich hier eh einige Problemchen)

jaenicke 5. Mär 2009 10:50

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
// EDIT:
Ok, der von ganz oben geht bei mir auch nicht. ;-)

Ändere ich aber das #$85 wie bereits geschrieben wurde in #$0085 dann funktioniert es...

himitsu 5. Mär 2009 11:06

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
Zitat:

Zitat von jaenicke
// EDIT:
Ok, der von ganz oben geht bei mir auch nicht. ;-)

Ändere ich aber das #$85 wie bereits geschrieben wurde in #$0085 dann funktioniert es...

ach mißt, ich probier es gleich mal ... hatte das mit den 00 ja nur vorher bei #$00A0..#$D7FF gemacht (wußte da ja noch nicht, daß die 85 der Gegenpart ist)

ich probier's gleich mal, aber dennoch komisch, warum es da unterschiedlich benahndelt wird
..
so, probier und es geht :shock:

hab es mal Sicherheitshalber überall gemacht, wo es außerhalb des ASCII-Bereich's liegt

jaenicke 5. Mär 2009 11:20

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
Zitat:

Zitat von himitsu
aber dennoch komisch, warum es da unterschiedlich benahndelt wird

Nein, das ist nicht komisch, du gibst mit den Nullen die Größe der Zahl an. Wenn ich einen Wert nicht einer Variablen (mit festem Typ) zuweise, dann entscheidet Delphi selbst über den Typ als der die Zahl verwendet wird. Und das ist immer die kleinstmögliche. Das passiert ja z.B. auch bei Mengen.

himitsu 5. Mär 2009 11:37

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
hab jetzt mal etwas rumprobiert
Delphi-Quellcode:
var c1, c2: WideChar;
begin
  c1 := #$85;
  c2 := #$0085;
  Memo1.Lines.Add(Format('%d %d', [Ord(#$85), Ord(#$0085)]));
  Memo1.Lines.Add(Format('%d %d', [Ord(c1), Ord(c2)]));
end;

Code:
// Delphi 7:
133 133
133 133

// Delphi 2009
133 133
8230 133
also wenn man das so betrachtet, dann isses kein Wunder, wenn da die #$85 plötzlich in dem Bereich liegt.

jaenicke 5. Mär 2009 11:46

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
Unter Delphi 7 ist SizeOf(#$0085) ja auch gleich SizeOf(#$85) und gleich 1. Unter Delphi 2009 werden die führenden Nullen entsprechend berücksichtigt und deshalb ist SizeOf(#$0085) = 2 und SizeOf(#$85) = 1.

Da ich eigentlich ohnehin immer führende Nullen entsprechend dem Datentyp verwendet habe (der Übersichtlichkeit wegen ;-)), ist mir dieser Unterschied nie aufgefallen.

himitsu 5. Mär 2009 11:57

Re: angeblich doppeltes Case-Label, aber ich find keines?
 
Bei Zahlen werwende ich auch meistens die führenden nullen, da es sich so besser lesen läßt, aber Zeichen hatte ich die kürzere Variante gewählt, da die für mich übersichtlicher vorkam.

Ist ja nicht schlchet, wenn z.B. 'ä' in seine entsprechende Unicode-Version umgewandelt wird, aber wenn man mal gemau dieses "Byte" bitgenau braucht :wall:

Nja, muß man jetzt halt etwas aufpassen.

Und innerhalb des ASCII-Bereichs, welchen die Meißten verwenden, gibt es zum Glück keine Probleme (da dort ANSI und Unicode übereinstimmen) und ansonsten brauchen viele zum Glück keine "Bitgenauen wandlungen, da sie ja das Zeichen und nicht dessen Wert benötigen :angel:


[add]
also im Grunde hätt es sich besser gemacht, wenn "direkte" Zeichen ala 'x' anders behandelt würden, als welche mit #


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 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