How to build sets of letters for the currently selected language (Views: 27)
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. |