Ruby練習問題4-7:ファイル操作を理解しよう

記事内に商品プロモーションを含む場合があります

Rubyの初心者向け問題4-7:ファイル操作を理解しよう

この問題を解くために必要な知識:
【レベル1~3の知識】
コメントの書き方、変数と定数、基本データ型、四則演算と演算子、入力と出力、文字列操作、分岐処理(if、if~else、elsif、case)、繰り返し処理(for、while、until、each)、範囲(Range)、例外処理(begin-rescue-end)、配列(Array)、ハッシュ(Hash)、コレクション操作(配列、ハッシュの操作)、Enumerableモジュール、メソッドの定義と呼び出し、メソッドの戻り値、クラスの定義と使用、コンストラクタ、クラスの継承、モジュールの定義と使用、ミックスイン

【レベル4の知識】
アクセスメソッド(ゲッター、セッター)カプセル化クラスメソッドとインスタンスメソッド共通メソッド、ブロックとイテレータ、プロック(Proc)ラムダ(Lambda)、ファイル操作(読み書き)、正規表現メタプログラミングの基礎

<<前の問題 問題集Top 次の問題>>

Rubyの文法「ファイル操作(読み書き)」とは

ここではファイル操作(読み書き)の意味や使い方を復習します。必要ない方はここをクリックして練習問題へ飛びましょう。



Rubyでは、簡単にファイルの読み書きを行うことができます。

ファイル操作はプログラムがデータを外部に保存したり、保存されたデータを読み込む際に重要な役割を果たします。

Rubyでは、主にFileクラスを使用して、ファイルの作成・読み込み・書き込みを行います。

ファイルに書き込む方法

まず、ファイルにデータを書き込む基本的な方法を紹介します。File.openメソッドを使用して、ファイルを開き、その中にデータを書き込むことができます。

以下の例では、「example.txt」という名前のファイルを作成し、その中に文字列を保存しています。

File.open("example.txt", "w") do |file|
  file.puts "Hello, Ruby!"
end
  • File.openメソッドは、最初の引数にファイル名を指定し、2番目の引数にモードを指定します。ここでは「w」を指定しており、これは「書き込みモード」を意味します。すでにファイルが存在する場合、その内容は上書きされます。
  • file.putsは、指定した文字列をファイルに書き込むためのメソッドです。

ファイルを読み込む方法

次に、ファイルからデータを読み込む方法を見てみましょう。以下の例では、先ほど書き込んだ「example.txt」からデータを読み取って表示しています。

File.open("example.txt", "r") do |file|
  puts file.read
end
  • この例では、2番目の引数に「r」を指定しています。これは「読み込みモード」を意味します。
  • file.readは、ファイル全体を読み込み、文字列として返します。

モードの種類

File.openメソッドで使用できる主なモードは以下の通りです。

  • "r": 読み込み専用モード。ファイルが存在しない場合はエラーになります。
  • "w": 書き込み専用モード。ファイルが存在しない場合は新しく作成され、既存の内容は上書きされます。
  • "a": 追記モード。既存のファイルに内容を追加します。

ブロックを使わない方法

File.openメソッドはブロック形式で使用するのが一般的ですが、ブロックを使わない方法もあります。その場合は、ファイルを手動で閉じる必要があります。

file = File.open("example.txt", "r")
puts file.read
file.close

ただし、ファイルを操作した後は必ずcloseメソッドを呼び出して、ファイルを閉じるようにしてください。

ブロックを使った形式の場合、ファイルは自動的に閉じられるため、初心者にはこちらがおすすめです。

まとめ

Rubyを使ったファイル操作はとてもシンプルです。まずは、ファイルを作成し、データを書き込んだり読み込んだりする基本操作を理解しましょう。

ファイル操作は多くのプログラムで使用されるので、しっかりと練習しておくことが大切です。




Ruby練習問題4-7_ファイル操作を使ってテキストファイルにデータを書き込もう

配列とハッシュを使って、複数の学生の名前とその成績をテキストファイルに保存するプログラムを作成しましょう。

このプログラムでは、各学生の名前と成績を保存し、それを「students.txt」というファイルに書き込みます。

ファイルには各学生の情報を1行ずつ書き込みます。

この問題の要件

以下の要件に従ってコードを完成させてください。

  • studentsというハッシュを定義し、キーに学生の名前、値に成績を格納すること。
  • write_to_fileというメソッドを定義し、このメソッドはハッシュとファイル名を引数に取り、ハッシュの内容をファイルに書き込むこと。
  • ファイルの書き込み操作には例外処理を追加し、エラーが発生した場合にはエラーメッセージを表示すること。

ただし、以下のような実行結果となること。

----- ↓出力される結果の例↓ -----

ファイルに書き込みが完了しました。

ファイル「students.txt」の内容:

Alice: 90
Bob: 80
Charlie: 85
David: 92

----- ↑出力される結果の例↑ -----

この問題を解くヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。

1.studentsハッシュの定義

2.write_to_fileメソッドの定義
 2-1. メソッド定義の開始(hashとfile_nameを引数に取る)
 2-2. beginブロックで例外処理の開始
  2-2-1. File.openメソッドでファイルを開く(書き込みモード “w”)
  2-2-2. ブロックを使用してファイル操作を行う
   2-2-2-1. ハッシュの各要素に対してループ処理を開始(eachメソッド)
   2-2-2-2. ハッシュのキー(name)と値(grade)をファイルに書き込む(file.putsメソッド)
 2-3. ファイルの書き込みが完了したら「ファイルに書き込みが完了しました」と表示
 2-4. 例外が発生した場合のエラーメッセージを表示(rescueブロック)
  2-4-1. 発生したエラーの内容を表示する

3.write_to_fileメソッドの呼び出し
 3-1. studentsハッシュを”students.txt”ファイルに書き込むためにwrite_to_fileメソッドを呼び出す

ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

# 学生の名前と成績を格納するハッシュを定義
students = {
  "Alice" => 90,
  "Bob" => 80,
  "Charlie" => 85,
  "David" => 92
}

# ファイルに書き込むメソッドの定義
def write_to_file(hash, file_name)
  begin
    File.open(file_name, "w") do |file|
      =begin
      【穴埋め問題1】 
      ここに、ファイルにハッシュのキーと値をそれぞれ書き込むコードを書いてください。
      =end
    end
    puts "ファイルに書き込みが完了しました。"
  rescue => e
    puts "ファイルの書き込み中にエラーが発生しました: #{e.message}"
  end
end

# studentsハッシュの内容をstudents.txtファイルに書き込む
write_to_file(students, "students.txt")

 

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。



解答例と解説

この問題の一つの正解例とそのコードの解説を以下に示します。

正解コードの例

例えば以下のようなプログラムが考えられます。

********************

# 学生の名前と成績を格納するハッシュを定義
students = {
  "Alice" => 90,
  "Bob" => 80,
  "Charlie" => 85,
  "David" => 92
}

# ファイルに書き込むメソッドの定義
def write_to_file(hash, file_name)
  begin
    # ファイルを開く(書き込みモード)
    File.open(file_name, "w") do |file|
      hash.each do |name, grade|
        # ハッシュの各キーと値をファイルに書き込む
        file.puts "#{name}: #{grade}"
      end
    end
    puts "ファイルに書き込みが完了しました。"
  rescue => e
    # 例外が発生した場合のエラーメッセージを表示
    puts "ファイルの書き込み中にエラーが発生しました: #{e.message}"
  end
end

# studentsハッシュの内容をstudents.txtファイルに書き込む
write_to_file(students, "students.txt")

********************

コードの解説

このコードは、Rubyを使用してハッシュに格納された学生の名前と成績をテキストファイルに書き込む方法を学ぶためのものです。

特に「ファイル操作」について詳しく説明します。

学生の名前と成績を格納するハッシュ

students = {
  "Alice" => 90,
  "Bob" => 80,
  "Charlie" => 85,
  "David" => 92
}

ここでは、学生の名前とその成績をハッシュに格納しています。キーが学生の名前、値が成績です。

ファイル操作の基本

ファイル操作は、外部ファイルにデータを保存したり、ファイルからデータを読み込む際に使います。Rubyでは、File.openを使ってファイルを開きます。

File.open(file_name, "w") do |file|
  # ファイルに書き込む処理
end

File.openは最初の引数にファイル名、2番目の引数にモード(”w”は書き込みモード)を指定します。

ファイルを開くと、ブロック内でそのファイルに対する処理を行います。この例では、ファイルにハッシュの内容を書き込んでいます。

ハッシュのデータをファイルに書き込む

hash.each do |name, grade|
  file.puts "#{name}: #{grade}"
end

この部分では、eachメソッドを使ってハッシュのすべてのキーと値(ここでは名前と成績)を繰り返し処理し、file.putsでそれらをファイルに書き込んでいます。

例外処理

rescue => e
  puts "ファイルの書き込み中にエラーが発生しました: #{e.message}"

ファイルの操作中にエラーが発生した場合、そのエラーメッセージを表示するための処理です。beginブロック内で例外が発生した場合は、rescueでキャッチされます。

メソッドの呼び出し

write_to_file(students, "students.txt")

最後に、write_to_fileメソッドを呼び出し、studentsハッシュの内容を”students.txt”に書き込んでいます。

ファイル操作のポイント

  • ファイルの操作は、ファイル名とモード(”w”など)を指定して行います。
  • ファイル操作が終わると自動的にファイルが閉じられるため、メモリリークの心配がありません。
  • 例外処理を使って、エラーが発生した際に適切なメッセージを出力することができます。

このように、Rubyのファイル操作はシンプルで、データの読み書きを簡単に行うことができます。

<<前の問題 問題集Top 次の問題>>

この問題への質問・コメント

この問題を作成するにあたりAIを活用しています。

問題ないことは確認していますが、もし間違いや表現の違和感などありましたら、ご指摘頂けると大変助かります。






    Ruby練習問題集へ戻る
    トップページへ戻る