On Thursday, 7 May 2015 at 23:13:41 UTC, PhilipDaniels wrote:
On Thursday, 7 May 2015 at 23:10:26 UTC, PhilipDaniels wrote:

Let's try reformatting that...

ubyte r, g, b;

// does not compile
auto numRead = formattedRead(dropExactly(input, 4), "%x/%x/%x", &r, &g, &b);
// does not compile
auto numRead = formattedRead(input[4..$], "%x/%x/%x", &r, &g, &b);

// compiles
string s2 = input[4..$];
auto numRead = formattedRead(s2, "%x/%x/%x", &r, &g, &b);

Alternatively, I can suggest to use the function csvReader():

-----
import std.csv,
       std.stdio,
       std.format;

void main() {

        auto input = "rgb:10/30/40";
        input = input[4 .. $];

        ubyte r, g, b;

        formattedRead(input, "%s/%s/%s", &r, &g, &b);

        auto numRead = [r, g, b];

        string[] numReadHex;
        foreach (e; numRead) {
                numReadHex ~= format("%x", e);
        }

        writeln(numRead);               // [10, 30, 40]
        writeln(numReadHex);    // ["a", "1e", "28"]

        auto inputNew = "rgb:10/30/40";
        auto newNumRead = csvReader!int(inputNew[4 .. $], '/').front;

        writeln(newNumRead); // [10, 30, 40]
}

Reply via email to