This works fine for me:

import std.stdio;
import std.string;

void main(string[] args)
{
       uint[string] freqs;
       foreach(lines; stdin.byLine()) {
               foreach(word; split(strip(lines))) {
                       ++freqs[word.idup];
               }
       }
       foreach(key, value; freqs){
               writefln("%6u\t%s", value, key);
       }
        getchar();
}

Perhaps you missed an import

On 12/16/10, Chris A <codexarca...@gmail.com> wrote:
> Hey all, I'm going over some examples in Alexandrescu's book, but I guess
> something has changed in the language because the example isn't working for
> me.
>
> The simple example:
>
> void main(string[] args)
> {
>       uint[string] freqs;
>       foreach(lines; stdin.byLine()) {
>               foreach(word; split(strip(lines))) {
>                       ++freqs[word.idup];
>               }
>       }
>       foreach(key, value; freqs){
>               writefln("%6u\t%s", value, key);
>       }
>       din.getc();
> }
>
>
> This throws an error during compile, like:
> main.d(11): Error: no property 'ByLine' for type '_iobuf'
> main.d(11): Error: function expected before (), not 1 of type int
> main.d(11): Error: foreach: int is not an aggregate type
>
> So seemingly byLine is no longer an existing function on stdin.  What is the
> current version of what this code is trying to do?
>

Reply via email to