reading in text files

Johannes Pfau spam at example.com
Wed Aug 24 07:25:18 PDT 2011


Brian Brady wrote:
>All
>
>I am working through Andrei Alexandrescus "The D Programming Language"
>but have hit a road block fairly early on.
>
>There is a program in the book which is designed to read through a
>text file and do a simple word count. The program looks like this:
>
>import std.stdio, std.string;
>
>void main()
>{
>  //Compute counts
>  uint[string] freqs;
>  foreach(line; stdin.byLine())
>  {
>    foreach(word; split(strip(line)))
>    {
>      ++freqs[word.idup];
>    }
>  }
>
>  //Prints count
>  foreach(key, value; freqs)
>  {
>    writefln("%6u\t%s", value, key);
>  }
>}
>
>My query is basically how to read the text file in?
>
>currently I am trying to use
>./readingHamlet cat hamlet.txt
>
>but it just hangs there, not doing anything(for a considerable time)
>so I am assuming I am doing something wrong. There isn't any actual
>mention in the book of *how* reading in the text file should be
>accomplished, so what is the best way to do this?
>
>std.file?
>
>Seems silly providing a program that analyses a text file, without
>telling the reader how to read in the text file, so I am wondering if
>there is some assumed knowledge I am missing?
>
>Regards.

Hi,
stdin.byLine() reads from the standard input, which is your
console/keyboard input by default. The default stdin doesn't have an
end, and unless you type something in, there's no input at all. That's
why the program just hangs.

On Linux/unix you can for example pipe the output from one command to
another:

cat hamlet.txt | ./readingHamlet

this way readingHamlet's standard input is connected to cat's standard
output.

-- 
Johannes Pfau



More information about the Digitalmars-d-learn mailing list