digitalmars.D.learn - Doing exercise from book, but I'm getting error with splitter
- Sanios (18/18) Jun 16 2014 Hello guys, as first I don't know, if I'm writing to correct
- Tolga Cakiroglu (3/21) Jun 16 2014 Add "import std.algorithm". Splitter is defined there.
- Sanios (4/4) Jun 16 2014 Thanks, but getting another error.
- Brad Anderson (4/7) Jun 16 2014 You can find the solution to this and other issues you may hit in
- Sanios (2/11) Jun 16 2014 Thanks, I've solved it!
- Andrew Brown (20/38) Jun 16 2014 I think you can find splitter in std.array. I had a few other
- Andrew Brown (17/61) Jun 16 2014 Sorry, comments split over two lines, this should work:
- Andrew Brown (2/19) Jun 16 2014
- sigod (2/5) Jun 18 2014 Actually length is size_t (uint on x86 and ulong on x64).
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.
Jun 16 2014
Add "import std.algorithm". Splitter is defined there. http://dlang.org/phobos/std_algorithm.html#splitter 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.
Jun 16 2014
Thanks, but getting another error. auto newID = dictionary.length; Error: associative arrays can only be assigned values with immutable keys, not char[]
Jun 16 2014
On Monday, 16 June 2014 at 16:38:15 UTC, Sanios wrote:<snip> And I'm getting this - Error: undefined identifier splitter It seems like std.string doesn't contain splitter.You can find the solution to this and other issues you may hit in the errata: http://erdani.com/tdpl/errata/
Jun 16 2014
On Monday, 16 June 2014 at 16:42:01 UTC, Brad Anderson wrote:On Monday, 16 June 2014 at 16:38:15 UTC, Sanios wrote:Thanks, I've solved it!<snip> And I'm getting this - Error: undefined identifier splitter It seems like std.string doesn't contain splitter.You can find the solution to this and other issues you may hit in the errata: http://erdani.com/tdpl/errata/
Jun 16 2014
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.
Jun 16 2014
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.
Jun 16 2014
I'm giving up On Monday, 16 June 2014 at 16:49:46 UTC, Andrew Brown wrote: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); } } }
Jun 16 2014
On Monday, 16 June 2014 at 16:49:46 UTC, Andrew Brown wrote:ulong[string] dictionary; // the length property is ulong, not uintActually length is size_t (uint on x86 and ulong on x64).
Jun 18 2014