文字列
カンマ区切りのテキストを読んで、2カラム目を合計する。
while(<>) {
split ',';
$sum += $_[1];
}
print $sum, "\n";
これをD言語にすると、
import std.stream;
import std.cstream;
import std.string;
import std.conv;void main(char[][] arg) {
int sum; // 0で初期化される
foreach(char [] a ; arg[1..length]) {
File inp = new File(a, FileMode.In);
foreach(char [] line ; inp) {
char [][] s = split(line, ",");
// char [][] s = split(line, ','); // 不可
sum += toInt(s[1]);
}
inp.close();
}
dout.writefln(sum);
}
文字列の型は、
char []
で、すなわち文字列は単なる配列らしい。
だから、文字列の配列は、
char [][]
となる。
カンマで区切って配列に入れるのは簡単である。
C++でこれをやるのにどれだけ苦労したことか(しかも遅い)。
char [][] s = split(line, ",");
// char [][] s = split(line, ','); // 不可
下のように、文字で区切るのはダメらしい。
文字列を整数に直すのは、
sum += toInt(s[1]);
toFloatとかtoDoubleとかいろいろある。
Cとちがってちょっとスペースがあったりするとダメ。
import std.stream;
import std.cstream;
import std.conv;void main(char [][] arg) {
char [] str = "123 ";
int n = toInt(str); // Error: conversion 123
dout.writefln(n);
}
整数を出力するには、フォーマットつき出力分を使う。
dout.writefln(sum);
フォーマットはCと同じように指定できる。
dout.writefln("%04d", sum); // 0030
こういうのは例外を投げる。
int n = toInt(str);
dout.writefln("%13.5f", n); // Error: std.format formatArg