今回は 5章「入出力」についてまとめます
ちなみに、前回は 4章「文字列」について書きました
前回の記事はこちら
入出力について
プログラム実行時の引数
Ruby プログラムを動かす時に外部から引数を ARGV
で受け取ることができる
# sample1.rb a = ARGV puts a $ sample1.rb hoge hoge
ファイルの入出力
File の IO は File
オブジェクトで扱うことができ、以下のように書ける
# tmp/test1.txt a b c # sample2.rb File.open("tmp/test1.txt") {|f| contents = f.read puts contents } $ ruby sample2.rb a b c
このコードのように File.open
でファイルを開く時にブロックを取ると、明示的に close しなくてもブロックを抜ける時にファイルを閉じてくれる
もちろん手動で管理することもできる
ファイルを操作時は、いくつかモードがあり、指定がなければデフォルトの 読み取り専用
になる
- 読み取り専用
- 書き込み専用
- 読み書き両用(新規作成は無し、既存内容は破棄して追記しない)
- 読み書き両用(新規作成は有り、既存内容は破棄して追記しない)
- 読み書き両用(新規作成は有り、追記する)
- 追記専用(新規作成は有り、追記する)
- バイナリモード
# sample3.rb File.open("tmp/test1.txt", "a+") {|f| f.puts "d\ne\nf" } $ ruby sample.rb $ cat test1.txt a b c d e f
また、事前に定義されている定数のビット和を組み合わせて指定することで、細かく設定することもできる
ファイル全部を読み込むのではなくて、1行ごとバイトごとに読み込むことも可能である
# sample4.rb File.open("tmp/test1.txt", "r") {|f| f.each_line do |l| puts "#{f.lineno}: #{l}" end } $ ruby sample4.rb 1: a 2: b 3: c 4: d 5: e 6: f
each_line
, each_byte
では順アクセスしかできないので、ランダムアクセスしたい場合はバイト位置を操作する必要がある
標準入出力
標準入力 $stdin
、標準出力 $stdout
、標準エラー出力 $stderr
で扱うことができる
エンコーディング
外部エンコーディングは、外部リソースを読み書きする際に指定することができる
指定をしなければプロセスのデフォルトのエンコーディングに従い、Encoding.default_external
で参照することができる
また default_external
はプロセスを起動するときに指定できる
内部エンコーディングは、ファイルを通じて読み書きする文字列のためのエンコーディングである
デフォルトは nil
で読み書きするデータは変更されない
以上、今回はボリュームが少なめ!!!