Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Inc(Word(Char)) (https://www.delphipraxis.net/184870-inc-word-char.html)

Bjoerk 27. Apr 2015 08:06

Inc(Word(Char))
 
Moin,
geht das bei Unicode?:gruebel:
Delphi-Quellcode:
{$IfDef UniCode}
function LowerCaseEx(const S: string): string; ???
const
  CharSet: TSysCharSet = ['A'..'Z', 'Ä', 'Ö', 'Ü'];
var
  I: integer;
begin
  Result := S;
  for I := 1 to Length(Result) do
    if CharInSet(Result[I], CharSet) then
      Inc(Word(Result[I]), 32);
end;
{$Else}
function LowerCaseEx(const S: string): string;
var
  I: integer;
begin
  Result := S;
  for I := 1 to Length(Result) do
    if Result[I] in ['A'..'Z', 'Ä', 'Ö', 'Ü'] then
      Inc(Byte(Result[I]), 32);
end;
{$EndIf}

DeddyH 27. Apr 2015 08:13

AW: Inc(Word(Char))
 
Delphi-Quellcode:
function LowerCaseEx(const S: string): string;
begin
  Result := AnsiLowerCase(S);
end;
;) Obwohl die Funktion mit "Ansi" beginnt, funktioniert sie genauso mit Unicode.

Uwe Raabe 27. Apr 2015 08:29

AW: Inc(Word(Char))
 
Wie Detlev schon erwähnte ist
Delphi-Quellcode:
AnsiLowerCase
die bevorzugte Methode, da sie sich auf das aktuelle Betriebssystem stützt und auch andere als nur Deutsche Umlaute berücksichtigt.

Wenn es dir aber nur um das Konstrukt mit dem Inc geht, daß kannst du auch ohne IFDEF erledigen. Der Cast auf Byte oder Word ist gar nicht notwendig:


Delphi-Quellcode:
function LowerCaseEx(const S: string): string;
var
  I: integer;
begin
  Result := S;
  for I := 1 to Length(Result) do
    if Result[I] in ['A'..'Z', 'Ä', 'Ö', 'Ü'] then
      Inc(Result[I], 32);
end;

Du bekommst dann zwar eine
Delphi-Quellcode:
deprecated
Warnung, aber die kommt aktuell auch bei
Delphi-Quellcode:
CharInSet
, was intern übrigens (außer bei NEXTGEN) exakt dasselbe tut.

Bjoerk 27. Apr 2015 08:44

AW: Inc(Word(Char))
 
OK. Thanx. Das mit AnsiLowerCase war mir schon klar. Noch schlimmer find ich den Namen Ansi übrigens bei AnsiSameText ect.. Wollte es auch deshalb mal wissen weil D2007 bei Inc(Word(..)) meldet -> der linken Seite kann nichts zugeweisen werden.

DeddyH 27. Apr 2015 08:51

AW: Inc(Word(Char))
 
Dass die Funktionen immer noch AnsiXXX heißen, darüber hat sich himitsu schon gelegentlich aufgeregt. Das hat einfach mit der Abwärtskompatibilität zu tun, damit auch "alter" Code an dieser Stelle nicht geändert werden muss.

Bjoerk 27. Apr 2015 08:57

AW: Inc(Word(Char))
 
Ja. Fehlt nur noch daß die Ansivariante SameText heißt.:-D Ich verwende meine LowerCaseEx übrigens nur deshalb (gelegentlich in Parsern wo DE als Sprache klar ist) weil sie ca. 2 mal so schnell ist wie AnsiLowerCase. Ansonsten braucht eine LowerCaseEx ja kein Mensch.

DeddyH 27. Apr 2015 09:04

AW: Inc(Word(Char))
 
SameText gibt es ja auch schon ;)


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