On 4/20/12 1:09 PM, H. S. Teoh wrote:
On Fri, Apr 20, 2012 at 08:44:06AM +0400, Denis Shelomovskij wrote:
20.04.2012 8:06, H. S. Teoh написал:
I'm writing some code that does some very simplistic parsing, and I'm
just totally geeking out on how awesome D is for writing such code:

        import std.conv;
        import std.regex;
        import std.stdio;

        struct Data {
                string name;
                string phone;
                int age;
                ... // a whole bunch of other stuff
        }

        void main() {
                Data d;
                foreach (line; stdin.byLine()) {
                        auto m = match(line, "(\w+)\s+(\w+)");

It's better not to create a regex every iteration. Use e.g.
---
auto regEx = regex(`(\w+)\s+(\w+)`);
---
before foreach. Of course, you are not claiming this as a
high-performance program, but creating a regex every iteration is
too common mistake to show such code to newbies.

You're right, it was unoptimized code. I ended up using ctRegex for
them:

        enum attrRx = ctRegex!`...`;
        enum blockRx = ctRegex!`...`;

        if (auto m = match(line, attrRx)) {
                ...
        } else if (auto m = match(line, blockRx)) {
                ...
        }

The fact that D enums can be arbitrary types is just beyond awesome.

No, enum there means "manifest constant", it has nothing to do with an enumeration...

Reply via email to