Rubyファイルの入出力
Ruby は、カーネル モジュールに実装された I/O 関連メソッドの完全なセットを提供します。すべての I/O メソッドは IO クラスから派生します。
クラス IO は、read、write、gets、puts、readline、getc、printf などのすべての基本メソッドを提供します。
この章では、Ruby で利用できるすべての基本的な I/O 関数について説明します。その他の関数については、Ruby の IO クラスをチェックしてください。
puts ステートメント
前の章では、変数に値を代入し、puts ステートメントを使用して出力を出力しました。
puts ステートメントは、変数に格納されている値を表示するようにプログラムに指示します。これにより、各行の末尾に新しい行が追加されます。
例
#!/usr/bin/ruby val1 = "This is variable one" val2 = "This is variable two" puts val1 puts val2
上記の例の出力は次のとおりです:
This is variable one This is variable two
gets ステートメント
gets ステートメントは、STDIN と呼ばれる標準画面からユーザー入力を取得するために使用できます。
例
以下のコードは、get ステートメントの使用方法を示しています。このコードはユーザーに値の入力を要求します。値は変数 val に格納され、最終的に STDOUT に出力されます。
#!/usr/bin/ruby puts "Enter a value :" val = gets puts val
上記の例の出力結果は次のとおりです。
Enter a value : This is entered value This is entered value
putc ステートメント
は puts ステートメントとは異なりますが、 puts ステートメントは文字列全体を画面に出力します。 1 文字を連続して出力するために使用できます。 例
次のコードの出力は文字 H だけです:
#!/usr/bin/ruby str="Hello Ruby!" putc str
上記の例の出力結果は次のとおりです:
Hprint
ステートメント
printステートメントは puts ステートメントに似ています。唯一の違いは、puts ステートメントはコンテンツの出力後に次の行にジャンプしますが、print ステートメントを使用する場合、カーソルは同じ行に配置されることです。 例
#!/usr/bin/ruby print "Hello World" print "Good Morning"
上記の例の出力は次のとおりです:
Hello WorldGood Morning
ファイルのオープンとクローズ
ここまでは、標準入出力の読み取りと書き込みを行ってきました。次に、実際のデータ ファイルを操作する方法を見ていきます。
File.newメソッド
File.newメソッドを使用して、読み取り、書き込み、または読み取りと書き込みのための File オブジェクトを作成できます。読み取りおよび書き込み権限は、mode パラメーターによって異なります。最後に、File.close メソッドを使用してファイルを閉じることができます。 構文
aFile = File.new("filename", "mode") # ... 处理文件 aFile.closeFile.open
メソッド
File.openメソッドを使用して、新しいファイルオブジェクトを作成し、そのファイルオブジェクトをファイルに割り当てることができます。ただし、File.open メソッドと File.new メソッドの間には少し違いがあります。違いは、File.open メソッドはブロックに関連付けることができますが、File.new メソッドは関連付けることができないことです。 File.open("filename", "mode") do |aFile|
# ... process the file
end
以下の表は、ファイルを開くためのさまざまなモードを示しています:
モード | 説明 |
---|---|
r | 読み取り専用モード。ファイル ポインタはファイルの先頭に配置されます。これがデフォルトのモードです。 |
r+ | 読み取りおよび書き込みモード。ファイル ポインタはファイルの先頭に配置されます。 |
w | 書き込み専用モード。ファイルが存在する場合、そのファイルは上書きされます。ファイルが存在しない場合は、書き込み用に新しいファイルが作成されます。 |
w+ | 読み取りおよび書き込みモード。ファイルが存在する場合は、既存のファイルを上書きします。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルが作成されます。 |
a | 書き込み専用モード。ファイルが存在する場合、ファイル ポインタはファイルの末尾に配置されます。つまり、ファイルは追加モードになっています。ファイルが存在しない場合は、書き込み用に新しいファイルが作成されます。 |
a+ | 読み取りおよび書き込みモード。ファイルが存在する場合、ファイル ポインタはファイルの末尾に配置されます。つまり、ファイルは追加モードになっています。ファイルが存在しない場合は、読み取りおよび書き込み用に新しいファイルが作成されます。 |
ファイルの読み取りと書き込み
単純な I/O に使用されるメソッドも、すべてのファイル オブジェクトで使用できます。つまり、gets は標準入力から 1 行を読み取り、aFile.gets はファイル オブジェクト aFile から 1 行を読み取ります。
ただし、I/O オブジェクトは、利便性を提供するアクセス メソッドの追加設定を提供します。
sysread メソッド
メソッド sysread を使用して、ファイルの内容を読み取ることができます。 sysread メソッドを使用する場合は、どちらのモードでもファイルを開くことができます。例:
ここに入力テキスト ファイルがあります:
This is a simple text file for testing purpose.
次に、このファイルを読み込んでみましょう:
#!/usr/bin/ruby aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else puts "Unable to open file!" end
このステートメントは、ファイルの最初の 20 文字を入力します。ファイル ポインタはファイル内の文字 21 に配置されます。
syswrite メソッド
メソッド syswrite を使用して、コンテンツをファイルに書き込むことができます。 syswrite メソッドを使用する場合は、ファイルを書き込みモードで開く必要があります。例:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") else puts "Unable to open file!" end
このステートメントは、ファイルに「ABCDEF」を書き込みます。
each_byteメソッド
このメソッドはクラスFileに属します。メソッド each_byte は、文字列内の各文字を反復処理できるメソッドです。以下のコード例を参照してください: 以下に示すように、
#!/usr/bin/ruby aFile = File.new("input.txt", "r+") if aFile aFile.syswrite("ABCDEF") aFile.rewind aFile.each_byte {|ch| putc ch; putc ?. } else puts "Unable to open file!" end
文字が 1 つずつ変数 ch に渡され、画面に表示されます:
A.B.C.D.E.F.s. .a. .s.i.m.p.l.e. .t.e.x.t. .f.i.l.e. .f.o.r. .t.e.s.t.i.n.g. .p.u.r.p.o.s.e...
IO.readlines メソッド
classFile はメンバーですクラス IO サブクラスの。 Class IO にはファイルを操作するためのメソッドもあります。
IO.readlinesはIOクラスのメソッドです。このメソッドは、ファイルの内容を 1 行ずつ返します。次のコードは、メソッド IO.readlines の使用法を示しています。
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
このコードでは、変数 arr は配列です。ファイル input.txt の各行は、配列 arr の要素になります。したがって、arr[0] にはファイルの最初の行が含まれ、arr[1] には 2 行目が含まれます。
IO.foreachメソッド
このメソッドも出力を行ごとに返します。メソッド foreach とメソッド readlines の違いは、メソッド foreach がブロックに関連付けられていることです。ただし、メソッド readlines とは異なり、メソッド foreach は配列を返しません。例:
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
このコードは、ファイル test の内容を 1 行ずつ変数ブロックに渡し、出力が画面に表示されます。
ファイルの名前変更と削除
ファイルの名前変更と削除は、rename メソッドと delete メソッドを使用して行うことができます。
次の例は、既存のファイル test1.txt の名前を変更します。
#!/usr/bin/ruby # 重命名文件 test1.txt 为 test2.txt File.rename( "test1.txt", "test2.txt" )
次の例は、既存のファイル test2.txt を削除します
#!/usr/bin/ruby # 删除文件 test2.txt File.delete("text2.txt")ファイル モードと所有権 マスク付き
chmod メソッドを使用して、ファイルのモードまたは許可/アクセス リスト:
次の例では、既存のファイルtest.txt のモードをマスク値に変更します:
#!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 )次の表は
chmod メソッドを示しています 使用可能なさまざまなマスク:
マスク | 説明 |
---|---|
0700 | オーナー用rwxマスク |
0400 | rオーナー用 |
0200 | w 、オーナー向け |
0100 | x 、向け所有者 |
0070 | rwx マスク、所属するグループの場合 |
0040 | r 、所属するグループの場合 |
0020 | w、所属するグループの場合|
x 、所属するグループ用 | |
rwx マスク 、その他用 | |
r 、その他用 | |
w 、他の人のために | |
x、その他の場合 | |
実行時にユーザーIDを設定 | |
実行時にグループIDを設定 | |
使用後も交換テキストを保存します保存します |