digitalmars.D.learn - string -> string literal
- Ellery Newcomer (4/4) Apr 20 2014 is there a function in phobos anywhere that takes a string and
- monarch_dodra (21/25) Apr 20 2014 It's a bit hackish, but it avoids deploying code and reinventing
- Timothee Cour via Digitalmars-d-learn (7/32) Apr 21 2014 does that work?
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\"");
Apr 20 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.
Apr 20 2014
does that work?
string escapeD(string a){
import std.array:replace;
return `r"`~a.replace(`"`,`" "\"" r"`)~`"`;
}
On Sun, Apr 20, 2014 at 11:14 AM, monarch_dodra via Digitalmars-d-learn <
digitalmars-d-learn puremagic.com> wrote:
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.
Apr 21 2014








Timothee Cour via Digitalmars-d-learn <digitalmars-d-learn puremagic.com>