On Wednesday, 22 February 2017 at 19:26:15 UTC, berni wrote:
In my program, I read a postscript file. Normal postscript files should only be composed of ascii characters, but one never knows what users give us. Therefore I'd like to make sure that the string the program read is only made up of ascii characters. This simplifies the code thereafter, because I then can assume, that codeunit==codepoint. Is there a simple way to do so?

Here a sketch of my function:

void foo(string postscript)
{
   // throw Exception, if postscript is not all ascii
   // other stuff, assuming codeunit=codepoint
}

Making full use of the standard library:

----
import std.algorithm: all;
import std.ascii: isASCII;
import std.exception: enforce;

enforce(postscript.all!isASCII);
----

That checks on the code point level (because strings are ranges of dchars). If you want to be clever, you can avoid decoding and check on the code unit level:

----
/* other imports as above */
import std.utf: byCodeUnit;

enforce(postscript.byCodeUnit.all!isASCII);
----

Or you can do it manually, avoiding all those imports:

----
foreach (char c; postscript) if (c > 0x7F) throw new Exception("not ASCII");
----

Reply via email to