AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Char Vergleich: #0 <> ''

Ein Thema von MasterEvil · begonnen am 18. Jun 2007 · letzter Beitrag vom 19. Jun 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#1

Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 08:22
Hallo,

mal wieder ein Problem beim Umstieg von Delphi 6 auf Delphi 2007.
Habe eine Fremdkomponente, die an mehreren Stellen einen Char auf #0 setzt.
An einer anderen Stelle, wird nun abgefragt, ob der Char='' ist.

In Delphi 6 ist '' und #0 das Selbe und in Delphi 2007 nicht.
Eine If-Abfrage auf Gleichheit schlägt also fehl.

Wisst ihr da genaueres? Kann man das einstellen?

Gruß,
Steffen
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 08:26
handelt es sich um ein Stringverarbeitung? bei PChar's markiert #0 das Ende der Zeichenkette, bei Strings ist dem nicht so. Wenn das unter d6 noch so war wurde es zeit das es gefixt wird. Bei Strings wird die Länge über SetLength gesetzt.

Ohne den Quelltext kann jedoch nur spekuliert werden ob es sich bei deinem Char um ein Zeichen eines Strings handelt, um ein Zeichen eines PChars um das Zeichen eines Array of Char etc.

Auf jeden Fall ist #0 <> ''
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#3

Re: Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 08:27
Bist Du Dir sicher, daß das in D6 dasselbe ist? General dürfte es erstmal auf keinen Fall dasselbe sein, wenn dann nur in einem speziellen Kontext, aber egal... als Lösung würde mir spontan einfallen, Trim(Text)='' zu prüfen, imho dürfte Trim das #0 zu einem '' umwandeln (bzw. aus #0 = leerer String + #0 das #0 wegschneiden )...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 08:28
#0 ist nicht ''.
#0 bedeutet End-Of-String
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 08:37
Ich bin mir definitiv sicher, dass es in Delphi 6 so ist.

Es ist allerdings ein WideChar und kein AnsiChar.
Beispiel:
Delphi-Quellcode:
var
 LastChar: WideChar;
begin
  LastChar:=#0;
  if LastChar='then
  begin
    ShowMessage('Gleich');
  end;
In Delphi 6 zeigt er die Message an, in Delphi 2007 nicht.

Das Problem ist, dass wir nicht wissen, wo überall so ein Vergleich stattfindet.
Allein die Fremdkomponente sind viele tausend Zeilen Code und das ist ja nicht mit Suchen & Ersetzen getan. Der Compiler meckert ja auch nicht und wir merken den Fehler eventuell erstmal gar nicht.

Hatte gehofft, dass es da für Backwards-Kompatibilität eine Einstellung oder einen Compiler-Switch gibt.

Gruß,
Steffen
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#6

Re: Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 08:42
@mkinzler: Doch! (re 1. Aussage) bzw. Nein! (re 2. Aussage)

String('')=PChar(#0) Ist durchaus wahr (haut selbst in Turbo Delphi noch hin)... nur beide auf einen Typ gecastet sind sie nicht identisch

Und selbst in PChars ist #0 oft genug nicht "End-Of-String", etwa in PWideChar, wo es bei lateinischer Schrift jedes zweite Byte ausmacht, oder in Enumerationen, auch ANSI, wo es ein normaler Trenner ist und der String bis zum #0#0 geht.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 08:43
Wenn Fremdkomponenten eine solche falsche Abfrage verwenden und dies bei einer spezifischen Delphiversion zufällig das richtige Ergebnis liefert, darfst du nicht verlangen, daß neuere Delphiversionen das selbe falsche Verhalten an den Tag legen.
Es scheint so als ob die Zuweisung LastChar:=#0; ignoriert wird, und deshalb LastChar leer bleibt.
Markus Kinzler
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#8

Re: Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 08:46
Tschuldigung, hatte das Beispiel übersehen. Als Workaround folgendes Typecasting verwenden (/in die Komponente einbauen, wo auch immer das halt vorkommt):

Delphi-Quellcode:
var
LastChar: WideChar;
begin
  LastChar:=#0;
  if PWideChar(LastChar)='then
  begin
    ShowMessage('Gleich');
  end;
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#9

Re: Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 08:50
Was hier zuschlaegt sind automatische Konversionen. #0 ist vom Typ Char. Die Zuweisung an einen WideChar bewirkt eine automatische Typkonversion.
Entsprechendes gilt fuer den Vergleich #0 = ''. Da es ein Vergleich zwischen Char und string ist, wird eine Seite automatisch konvertiert. Egal ob der Char zum Leerstring konvertiert wird oder '' als "leeres" Stringendezeichen interpretiert wird, der Vergleich sollte gelingen. Hier kommt ein Problem von Pascal zum Vorschein. 'x' kann je nach Kontext Char- oder String-Literal sein.
Ich glaube D2007 macht hier einen Fehler.
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Char Vergleich: #0 <> ''

  Alt 18. Jun 2007, 09:17
Hab es gerad mal mit anderen Delphi Versionen getestet.

Delphi 6, Delphi 7 und Delphi 2005 zeigen die Message alle an.
Delphi 2006 und 2007 nicht mehr.
In Delphi 2005 .NET geht es ebenfalls nicht.

Was Robert sagt, klingt für mich einleuchtend.
Machen diese Sachen nicht die Codepages (Codeseiten)?
Die kann man ja nun irgendwie einstellen. Ist aber bei mir nur Standard auswählbar.

Gruß,
Steffen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:04 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