# to_string

Definition: | string res = to_string(object data_in, integer string_quote=0, integer embed_string_quote='"')
Description: | Converts an object into a text string. data_in: Any Phix object. string_quote: If not zero (the default) this is used to enclose data_in, if it is already a string. embed_string_quote: Used to enclose any strings embedded inside data_in. The default is double quote. Returns the string repesentation of data_in.
pwa/p2js: | Supported, but only somewhat unofficially/reluctantly, see examples and alternatives below.
Comments: | The returned value is guaranteed to be a displayable text string. string_quote is only used if data_in is already a string. In this case, if string_quote is zero the string is returned unaltered, otherwise all occurances of string_quote already in data_in are prefixed with the ’\’ escape character, as are any pre-existing escape characters. Then string_quote is added to both ends of data_in, resulting in a quoted string. embed_string_quote is only used if data_in is a sequence that contains strings. In this case, it is used as the enclosing quote for embedded strings. See also (s)printf()’s '%v' handling, which is often easier, and/or ppp. This routine is defined in builtins\to_str.e (an autoinclude) and is provided only for compatibility with Euphoria.
Example: |
    printf(1,"%s\n",{to_string(12)})                        -- 12
    printf(1,"%s\n",{to_string("abc")})                     -- abc
    printf(1,"%s\n",{to_string("abc",'"')})                 -- "abc"
    printf(1,"%s\n",{to_string(`abc\"`,'`')})               -- `abc\\"`     -- see note
    printf(1,"%s\n",{to_string({12,"abc",{4.5, -99}})})     -- {12, "abc", {4.5, -99}}
    printf(1,"%s\n",{to_string({12,"abc",{4.5, -99}},0,0)}) -- {12, abc, {4.5, -99}}
    puts(1,"\n")
    printf(1,"%v\n",{12})                       -- 12
    printf(1,"%v\n",{"abc"})                    -- "abc" (no quote-less %v, that'd be %s)
    printf(1,"%v\n",{`abc\"`})                  -- `abc\"`  -- that's better!
    printf(1,"%v\n",{{12,"abc",{4.5,-99}}})     -- {12,"abc",{4.5,-99}}         -- ("")
    puts(1,"\n")
    pp(12)                                      -- 12
    pp("abc",{pp_StrFmt,-1})                    -- abc
    pp("abc")                                   -- "abc"
    pp(`abc\"`)                                 -- `abc\"`  -- ditto
    pp({12,"abc",{4.5, -99}})                   -- {12, `abc`, {4.5,-99}}
    pp({12,"abc",{4.5, -99}},{pp_StrFmt,-1})    -- {12, abc, {4.5,-99}}
Note: I spotted in passing that the fourth item was completely wrong [compared to Euphoria?]. I corrected it best I could but cannot (be bothered to) precisely justify exactly why it behaves in the particular way that it does. Personally I would use and recommend sprint() or the (phix-specific) printf(%v) instead.