D言語によるファイル入出力

D言語では、f(a, b)a.f(b) のように書き換えることができます。(Uniform Function Call Syntax)
また、下記の file1.d において、“gm”m は、“multiline mode” を表します。“^”“$” を使わない場合は、m を付けても付けなくても同じです。

file1.d

import std.file, std.regex;

void main() {
  "D:\\fout.txt".write("D:\\fin.txt".read);
  //write("D:\\fout.txt", read("D:\\fin.txt"));

  auto text = "D:\\fin.txt".readText;
  //auto text = cast(string)"D:\\fin.txt".read;
  text = text.replace(regex("$", "g"), "[EOF]");   //end of file -> [EOF]
  text = text.replace(regex("$", "gm"), "[EOL]");  //end of line -> [EOL]
  "D:\\fout.txt".write(text);

  foreach (file; dirEntries(".", "*.{htm,txt}", SpanMode.depth)) {
  //foreach (file; dirEntries(std.stdio.readln[0..$-1], "*.{htm,txt}", SpanMode.depth)) {
    file.write(file.readText.replace(regex("^$", "gm"), "[EL]"));  //empty line -> [EL]
    file.write(file.readText.replace(regex("<tag>.*?</tag>", "g"), "<tag>abcde</tag>"));
  }
}

file2.d

import std.stdio;

void main() {
  char[] buffer;

  buffer.readln;   //stdin  -> buffer
  buffer.writeln;  //buffer -> stdout
  readln.writeln;  //stdin  -> stdout

  auto fin = File("D:\\fin.txt", "r");
  auto fout = File("D:\\fout.txt", "w");

  while (fin.readln(buffer)) {
    fout.write(buffer);
  }

  while (!fin.eof) {
    fout.write(fin.readln);
  }

  foreach (line; fin.byLine) {
    fout.writeln(line);
  }
}

file3.d

import std.stream;

void main() {
  ubyte[1] buffer;
  auto fin = new File("D:\\fin.txt");
  auto fout = new File;
  fout.create("D:\\fout.txt");

  while (fin.read(buffer)) {
    fout.write(buffer);
  }

  while (!fin.eof) {
    fout.writeLine(fin.readLine);
  }
}

参考資料

1.std.file
2.std.stdio
3.std.stream

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中