On Saturday 17 July 2010 15:41:14 Michael Koehmstedt wrote: > I'm having trouble figuring out how to do formatted console input, > something like C scanf() or C++ templated stream input. Unfortunately, > console input isn't covered in much detail in TDPL book. There doesn't > appear to be much discussion about the standard library at all, which was > a bit disappointing. > > But anyway, what different ways are there to properly do input from the > console? Fetching a string with readln() is easy enough, but how could I > fetch, say, an integer value? Conversely, what is the preferred method for > converting string into integer or floating point values? > > Thanks, > Michael
Parsing strings like that isn't something that I've done much of lately, so I don't know what the best way to do it in D is. However, std.conv has essentially what you're looking for. For most conversions, just use to!T() - e.g. to!int(str) will convert the string str into an int and to!string(i) will convert the integer i to a string. For more complicated parsing, there's parse!T() which does essentially the same thing except that instead of converting the whole string, it only converts the portion which makes sense and leaves the rest. e.g. string test = "123 \t 76.14"; auto a = parse!(uint)(test); assert(a == 123); assert(test == " \t 76.14"); So, with multiple calls to parse, you can parse the string. I'm not aware of a way to do it in manner like sscanf though, where you parse it all in one command. Worse comes to worse, if you really want that, you can always use C's sscanf and it'll work. TDPL purposely didn't touch on Phobos much. One reason for this is because it was focusing on the language itself rather than whatever libraries there might be. The other main reason, as I understand it, is that Phobos has been in too much flux to have put in TDPL. A lot of work has been done on Phobos in the past few months, and TDPL was already turned in to the editor. And a lot of work continues to be done on Phobos. So, anything that was put in TPDL on Phobos would either have constrained Phobos so that it couldn't change when it needed to or would have made it so that TDPL didn't match Phobos - either that or we would have had to wait longer for TDPL. - Jonathan M Davis