On Mon, 30 Dec 2013, Marcos Douglas wrote:

On Mon, Dec 30, 2013 at 9:48 AM, Marcos Douglas <m...@delfire.net> wrote:
On Mon, Dec 30, 2013 at 9:41 AM, Michael Van Canneyt
<mich...@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?

No. You make a wrong assumption.

TypeInfo will return the DECLARED type of S.

Not the type that was actually passed when calling the routine:
That has been converted to the declared type of S by the compiler even before the routine ShowType is called.

Michael.

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
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal
_______________________________________________
fpc-pascal maillist  -  fpc-pascal@lists.freepascal.org
http://lists.freepascal.org/mailman/listinfo/fpc-pascal

Reply via email to