Sorry, comments split over two lines, this should work:

import std.stdio, std.array, std.string; //need to import
std.array

void main() {
   ulong[string] dictionary; // the length property is ulong, not
uint
   foreach (line; stdin.byLine()) {
     foreach (word; splitter(strip(line))) {
       if (word in dictionary) continue;
       auto newID = dictionary.length;  //dictionarys need
immutable keys, you // can create this with .idup
       dictionary[word.idup] = newID;
       writeln(newID, '\t', word);
     }
   }
}

On Monday, 16 June 2014 at 16:46:37 UTC, Andrew Brown wrote:
I think you can find splitter in std.array. I had a few other
problems compiling your code, I could get this version to work:

import std.stdio, std.array, std.string; //need to import
std.array

void main() {
ulong[string] dictionary; // the length property is ulong, not
uint
   foreach (line; stdin.byLine()) {
     foreach (word; splitter(strip(line))) {
       if (word in dictionary) continue;
       auto newID = dictionary.length;
dictionary[word.idup] = newID; //dictionarys need immutable
keys, you can create this with .idup
       writeln(newID, '\t', word);
     }
   }
}

Good luck!

Andrew

On Monday, 16 June 2014 at 16:38:15 UTC, Sanios wrote:
Hello guys, as first I don't know, if I'm writing to correct
section, but I've got a problem. I'm actually reading book of D
guide and trying to do it like it is in book.

My code is:

import std.stdio, std.string;

void main() {
        uint[string] dictionary;
        foreach (line; stdin.byLine()) {
                foreach (word; splitter(strip(line))) {
                        if (word in dictionary) continue;
                        auto newID = dictionary.length;
                        dictionary[word] = newID;
                        writeln(newID, '\t', word);
                }
        }
}

And I'm getting this - Error: undefined identifier splitter
It seems like std.string doesn't contain splitter.

Reply via email to