string -> string literal

monarch_dodra via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Apr 20 11:14:21 PDT 2014


On Sunday, 20 April 2014 at 17:55:25 UTC, Ellery Newcomer wrote:
> is there a function in phobos anywhere that takes a string and 
> escapes it into a string literal suitable for string mixins? 
> something like
>
> assert (f("abc\ndef") == "\"abc\\ndef\"");

It's a bit hackish, but it avoids deploying code and reinventing 
anything. You can use format "string-range" formating to print 
the string escaped. Catch that, and then do it again:

     string s = "abc\ndef";
     writefln("[%s]\n", s); //raw

     s = format("%(%s%)", [s]);
     writefln("[%s]\n", s); //escaped

     s = format("%(%s%)", [s]);
     writefln("[%s]\n", s); //escapes are escaped

As you can see from the output, after two iterations:

[abc
def]

["abc\ndef"]

["\"abc\\ndef\""]

I seem to recall that printing strings "escaped" has been 
requested before, but, AFAIK, this is the best we are currently 
providing.

Unless you call std.format's "formatElement" directly. However, 
this is an internal and undocumented function, and the fact it 
isn't private is probably an oversight.


More information about the Digitalmars-d-learn mailing list