How to escape control characters?

cy via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Wed Mar 30 22:17:59 PDT 2016


Oh, cool.

On Thursday, 31 March 2016 at 03:29:19 UTC, H. S. Teoh wrote:
> Or implement manual substitution with a pipeline:
> 	string myString = ...;
> 	string escapedStr = myString
> 		.chunks(1)
> 		.map!(c => (c == "\n") ? "\\n" :
> 			   (c == "\r") ? "\\r" :
> 			   (c == "\t") ? "\\t" :
> 			   c)
> 		.joiner
> 		.array;

What I did was

string escapedStr = myString
   .replace("\n",`\n`)
   .replace("\r",`\r`)
   .replace("\t",`\t`);

That makes like 3 copies of the string I guess, but whatever. I'm 
not sure how efficient a general chunking filter would be on 
1-byte chunks, and I certainly don't want to be creating a 
zillion unescaped 1-byte strings, so if I cared I'd probably do 
something like this:

auto escapedStr = appender!string;
for(c;myString) {
   switch(c) {
   case '\n':
    escapedStr.put("\\n");
   case '\r':
    escapedStr.put("\\r");
   ...
   default:
    escapedStr.put(c);
   }
}

It'd have to be long and boring to get all the control characters 
though, and possibly unicode ones too, or do "\xNN" style byte 
escapes. So I was hoping something standard already existed.


More information about the Digitalmars-d-learn mailing list