パスを組み立てる
Pathnameを使うと、OSの区切り文字を直接書かずにパスを組み立てられます。
パスRUBY
require "pathname"
path = Pathname.new("data") / "message.txt"
puts path
puts path.expand_path実行例OUTPUT
data/message.txt
/home/user/project/data/message.txt絶対パスは環境で異なります。相対パスは現在の作業フォルダーが基準です。
テキストを読み書きする
フォルダーを作り、UTF-8で保存して読みます。
テキストRUBY
require "fileutils"
FileUtils.mkdir_p("data")
File.write("data/message.txt", "Rubyを勉強中です。\n", encoding: "UTF-8")
content = File.read("data/message.txt", encoding: "UTF-8")
print content実行結果OUTPUT
Rubyを勉強中です。上書き
File.writeは既存内容を置き換えます。追記はFile.open(path, "a") { |file| file.puts text }を使います。CSVを扱う
値にカンマや引用符が入っても扱えるよう、標準ライブラリのCSVを使います。
CSVの保存と読込RUBY
require "csv"
CSV.open("products.csv", "w", write_headers: true,
headers: %w[name price], encoding: "UTF-8") do |csv|
csv << ["りんご", 120]
csv << ["みかん", 80]
end
CSV.foreach("products.csv", headers: true, encoding: "UTF-8") do |row|
puts "#{row['name']}: #{row['price']}円"
end実行結果OUTPUT
りんご: 120円
みかん: 80円JSONを扱う
JSONは配列やハッシュに近い構造を保存できます。生成と解析には標準のjsonを使います。
JSONRUBY
require "json"
users = [{ name: "Mity", age: 20 }]
File.write("users.json", JSON.pretty_generate(users), encoding: "UTF-8")
loaded = JSON.parse(File.read("users.json", encoding: "UTF-8"))
puts loaded[0]["name"]
puts loaded[0]["age"]実行結果OUTPUT
Mity
20信頼しすぎない 読み込んだJSONのキーや型が期待どおりか確認します。パスワードや秘密鍵を公開フォルダーへ保存しません。
ミニ課題:買い物メモ
商品名と個数をハッシュの配列としてJSONへ保存し、次の実行で一覧表示してください。ファイルがない初回は空配列から始めます。