I’d like to parse formatted basic values and a few custom strings from a TextReader – essentially like scanf allows.
- My input might not have line-breaks, so ReadLine+Regex isn’t an option. I could use some other way of chunking text input; but the problem is that I don’t know the delimiter at compile time (so that’s tricky), and that that delimiter might be localization-dependant. For instance, a float followed by a comma might be “1.5,” or “1,5,” but in both cases attempting to parse the float should be “greedy”.
- To be safe, I’d like to assume my input is actively hostile (say, streaming in from a network stream): i.e. intentionally missing chunking delimiters.
- I’d like to avoid custom Regex’s: int.Parse and double.Parse work well and are localization-aware. Don’t get me started on DateTime’s – I might need a few custom patterns anyhow, but writing Regexes to cover that scenario doesn’t sound like fun.
For a concrete example, let’s say I have a TextReader and that I know the next value should be a double – how can I extract that double and possibly a limited amount of lookahead without reading the entire stream and without manually writing a localizable double-parser?
Similar Questions
There’s a previous question “Looking for C# equivalent of scanf” which sounds similar but the Q+A focus on readline+regex (which I’d like to avoid). How can I use Regex against a TextReader? didn’t find an answer (beyond chunking), and in any case I’d like to avoid writing my own Regexes.
Based on that lack of answers and still not having found anything myself, it seems that