私はDを学んでいます。テキストファイルを1行ずつ読み込んで、各行を別々の単語に分け、すべてを標準出力に出力する簡単なプログラムがあります。Dの文字の3D配列の問題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., ]
任意のアイデアを私が間違ってやっていますか?
なぜ 'char [] [] []'を使うとコンパイルが失敗するのですか?確かにそれは醜いですが、まだ動作するはずです。私は 'split(strip(line))'が返す 'char [] []'と 'string []'との間で変換に多くのトラブルを抱えていたので、これを使い始めました。どのような場合でも、ソリューションは機能します。ありがとうございました。 – Max
@Max、申し訳ありませんが、あなたは正しいです。私はあなたがchar []を追加していると思っていました。私は私の答えを更新します。 –