[fpc-pascal] How to know the string type of a variable?

Marcos Douglas md at delfire.net
Mon Dec 30 14:53:26 CET 2013


On Mon, Dec 30, 2013 at 9:48 AM, Marcos Douglas <md at delfire.net> wrote:
> On Mon, Dec 30, 2013 at 9:41 AM, Michael Van Canneyt
> <michael at freepascal.org> wrote:
>>
>>
>> On Mon, 30 Dec 2013, Marcos Douglas wrote:
>>
>>> Hi,
>>>
>>> Is possible to know what string type of a variable (AnsiString,
>>> UTF8String, RawByteString, etc)?
>>
>>
>> You can try
>>
>> if TypeInfo(S)=TypeInfo(AnsiString) then
>>
>> etc.
>>
>> The following program
>>
>> procedure t(S : String);
>>
>> begin
>>   if typeinfo(s)=typeinfo(shortstring) then
>>     Writeln('ShortString')
>>   else
>>     Writeln('Ansistring'); end;
>>
>> begin
>>   t('');
>> end.
>>
>> Prints ShortString if compiled as-is (fpc mode), and prints AnsiString if
>> compiled with -S2h (objfpc mode, string=ansistring)
>
> TypeInfo!
> I was trying using "type(s)", "s is AnsiString"... I forgot.
>
> Thank you.

Well, didn't worked as I wanted.
For example, I know UTF8String is an AnsiString but the TypeInfo
should catch UTF8String not AnsiString, doesn't?

See the code bellow:

=== BEGIN ===
procedure TForm1.Button1Click(Sender: TObject);
var
  AStr: AnsiString;
  U8Str: UTF8String;
  UniStr: UnicodeString;

  function  ShowType(S: string): string;
  begin
    if TypeInfo(S) = TypeInfo(AnsiString) then
      ShowMessage('AnsiString')
    else if TypeInfo(S) = TypeInfo(UTF8String) then
      ShowMessage('UTF8String')
    else if TypeInfo(S) = TypeInfo(UnicodeString) then
      ShowMessage('UnicodeString')
  end;

begin
  AStr := 'ábçdé';
  U8Str := 'ábçdé';
  UniStr := 'ábçdé';

  ShowType(AStr);
  ShowType(U8Str);
  ShowType(UniStr);
end;

=== END ===

The result is:
AnsiString
AnsiString
AnsiString

Regards,
Marcos Douglas



More information about the fpc-pascal mailing list