Я изучаю D, и у меня есть простая программа, которая читает строку за строкой в текстовом файле, разделяет каждую строку на отдельные слова и печатает все это в стандартный вывод.
import std.stdio;
import std.string;
void main(string args[])
{
char[][][] lines;
auto input = File(args[1], "r");
foreach(line; input.byLine())
{
auto words = split(strip(line));
lines ~= words;
}
foreach(line; lines)
{
writeln(line);
}
}
Код для создания words
работает.Если я просто вызываю writeln
на словах каждый раз, когда они назначаются, я получаю вывод, который хочу.Но если я добавлю words
к lines
и выведу lines
, тогда произойдут странные вещи.lines
имеет запись для каждой строки в исходном файле, но каждая строка является поврежденной версией последней прочитанной строки.Например, если последняя строка файла выглядит следующим образом:
END START * End of routine
Я получаю вывод, который выглядит примерно так:
[ , END, ST, *, End , f rout, ne, , , e other]
[ , END, ST, *, End of, rout, ne, , , e othe]
[ , END, STAR, *, End of, rout, ne.,
e]
[ , END, START , *, End of, rout, ne.,
e]
[END , STAR]
[ , END, START , *, End , f , out, ne. ]
[END, START, *, End, of ro, tine. , , ,
]
[END, STA, *, o, r, ut]
[ , END , S, *, End, o, r, utine., , , ,
, o]
[END, START , *, of routi, e., ]
Есть идеи, что я делаю неправильно?