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...