2004. június 25., péntek
How to build sets of letters for the currently selected language
Problem/Question/Abstract:
Is there any way to enumerate the contents of a set? Just now I have a set of char, each char is a lower case character, and need to add the corresponding upper case characters to the set. Any other way than looping through the set range and do an inclusion check each time?
Answer:
No. If you are after building sets of letters for the currently selected language you could do it using API functions like IsCharAlpha and IsCharUpper:
unit Charsets;
interface
type
TCharSet = set of AnsiChar;
const
Signs: TCharset = ['-', '+'];
Numerals: TCharset = ['0'..'9'];
HexNumerals: TCharset = ['A'..'F', 'a'..'f', '0'..'9'];
IntegerChars: TCharset = ['0'..'9', '-', '+'];
var
Letters, LowerCaseLetters, UpperCaseLetters: TCharSet;
FloatChars, SciFloatChars: TCharset;
AlphaNum, NonAlphaNum: TCharset;
{ Need to call this again when locale changes. }
procedure SetupCharsets;
implementation
uses
Windows, Sysutils;
procedure SetupCharsets;
var
ch: AnsiChar;
begin
LowerCaseLetters := [];
UpperCaseLetters := [];
AlphaNum := [];
NonAlphaNum := [];
for ch := Low(ch) to High(ch) do
begin
if IsCharAlpha(ch) then
if IsCharUpper(ch) then
Include(UpperCaseLetters, ch)
else
Include(LowerCaseLetters, ch);
if IsCharAlphanumeric(ch) then
Include(AlphaNum, ch)
else
Include(NonAlphaNum, ch);
end;
Letters := LowerCaseLetters + UpperCaseLetters;
FloatChars := IntegerChars;
Include(FloatChars, DecimalSeparator);
SciFloatChars := FloatChars + ['e', 'E'];
end;
initialization
SetupCharsets;
end.
Feliratkozás:
Megjegyzések küldése (Atom)
Nincsenek megjegyzések:
Megjegyzés küldése