ファイルへの書き込みについて

Kazunori Kamiya
4 min readAug 13, 2017

--

・Exercise16:読み込みと書き込みについて

ここではまず、覚えておいてほしいコマンドのリストを挙げます。

  • close — エディターで”File->Save..”とするのと似たように、ファイルを閉じます。
  • read — ファイルの中身を読み取る。その結果は、変数に割り当てることができます。
  • readline — テキストファイルの1行だけを読み取ります。
  • truncate — ファイルの中身を空っぽにします。
  • write(‘stuff’) — ファイルに”stuff”と書き込みます。
  • seek(0) — 読み取りもしくは書き込み位置をファイルの先頭に移動します。

これらは非常に重要なコマンドであり、絶対に知っておくべきでしょう。
いくつかはパラメーターを必要としますが、そんなに気にする必要はありません。
ここで覚えておくべきことは、”write”がファイルに書き込みたい文字列をパラメーターとして必要とするということです。

実際にコマンドを使った、シンプルなテキストを書いてみましょう。

出力結果について

以下のようになります。

学習ドリル

  1. もし上のプログラムが理解できない場合は、以前学習した部分に戻ってきちんと整理しましょう。各行の上にコメントを書くことで理解の手助け、あるいは何を調べたらいいかぐらいはわかると思います。
  2. “read”と”argv”を使って、前回のエクササイズでやったようなファイルを読み込むスクリプトを書いてみましょう。
  3. このスクリプトには繰り返しが多すぎるので、line1~3を1つの”target.write”で書けるようにしてみてください。
  4. なぜopenコマンドを使用する際に、wを付与したのか調べてみてください。
  5. もしwを用いてファイルを開いた場合、本当に”target.truncate”が必要でしょうか?Rubyのopenコマンドに関するドキュメントを読んで、正しいかどうか確かめてください。

学習ドリルの答え

2. 以下のようなスクリプトを書いて実行しました。

3. 該当部分を以下のように書き換えて実行すると、同じ結果が得られました。

4. 単純にopen(ファイル名)でファイルを開くと、そのファイルは読み取り専用となります。しかしそれでは今回のように、ファイルに何かを書き込むことはできないため、書き込みモードになるwを付与しています。

5. openコマンドにおけるwオプションは、書き込みモードにする他に新規作成という意味もあります。これは、もしwを使ってファイルを開こうとした場合、そのファイルが存在しなければ新規作成されるということです。つまり、このエクササイズでは実行時に指定した”test.txt”がその時点で存在していない場合、空っぽのファイルが新たに生成されるのでtruncateは不要になると言えます。

--

--