Ruby ファイルの入出力
Ruby は、カーネル(Kernel)モジュールに実装された I/O 関連のメソッド一式を提供します。すべての I/O メソッドは IO クラスから派生しています。
类 IOすべての基本的なメソッドを提供しています。例えばread、 write、 gets、 puts、 readline、 getcとprintf。
この章では、Ruby で利用可能な基本的な I/O 関数をすべて説明します。より多くの関数については、Ruby のIOクラスを参照してください。
puts文
前の章では、変数に値を代入し、puts文を使用して出力しました。
puts文は、プログラムに変数に格納された値を表示させます。これは各行の末尾に新しい行を追加します。
例
上記の例の実行結果は次のとおりです。
This is variable one This is variable two
gets文
gets文は、STDIN という名前の標準入力からユーザー入力を取得するために使用できます。
例
次のコードは gets 文の使用方法を示しています。このコードは、ユーザーに値の入力を促し、その値は変数 val に格納され、最終的に STDOUT に出力されます。
例
上記の例の実行結果は次のとおりです。
Enter a value : This is entered value This is entered value
putc文
とputs文とは異なり、puts文は文字列全体を画面に出力しますが、putc文は、1文字ずつ順に出力するために使用できます。
例
以下のコードの出力は文字 H だけです:
例
上記の例の実行結果は次のとおりです。
H
print文
print文とputs文は似ています。唯一の違いは、puts文は出力内容の後に改行しますが、print文を使用する場合、カーソルは同じ行に位置します。
例
上記の例の実行結果は次のとおりです。
Hello WorldGood Morning
ファイルのオープンとクローズ
これまで、標準入力と標準出力の読み書きを行ってきました。次に、実際のデータファイルを操作する方法を見ていきます。
File.newメソッド
あなたはFile.newメソッドを使用して...を作成できますFileオブジェクトは、読み取り、書き込み、または読み書きに使用されます。アクセス権限は mode パラメータに依存します。最後に、File.closeメソッドを使用してそのファイルを閉じます。
構文
File.openメソッド
あなたはFile.openメソッドを使用して、新しい file オブジェクトを作成し、その file オブジェクトをファイルに割り当てることができます。ただし、File.openとFile.newメソッドの間には少し違いがあります。違いは、File.openメソッドはブロックと関連付けることができますが、File.newメソッドはできません。
次の表は、ファイルを開くためのさまざまなモードを示しています:
| モード | 説明 |
|---|---|
| r | 読み取り専用モード。ファイルポインタはファイルの先頭に配置されます。これはデフォルトモードです。 |
| r+ | 読み書きモード。ファイルポインタはファイルの先頭に配置されます。 |
| w | 書き込み専用モード。ファイルが存在する場合は、ファイルを上書きします。ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。 |
| w+ | 読み書きモード。ファイルが存在する場合は、既存のファイルを上書きします。ファイルが存在しない場合は、読み書き用の新しいファイルを作成します。 |
| a | 書き込み専用モード。ファイルが存在する場合は、ファイルポインタはファイルの末尾に配置されます。つまり、ファイルは追記モードです。ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。 |
| a+ | 読み書きモード。ファイルが存在する場合は、ファイルポインタはファイルの末尾に配置されます。つまり、ファイルは追記モードです。ファイルが存在しない場合は、読み書き用の新しいファイルを作成します。 |
ファイルの読み書き
単純な I/O のためのメソッドは、すべての file オブジェクトにも使用できます。つまり、gets は標準入力から1行読み取り、aFile.getsfile オブジェクト aFile から1行読み取ります。
ただし、I/O オブジェクトは、アクセス用の追加メソッドを備えており、私たちに利便性をもたらします。
sysreadメソッド
あなたはsysreadメソッドを使用して、ファイルの内容を読み取ることができます。sysread メソッドを使用する場合、任意のモードでファイルを開くことができます。例:
以下は入力テキストファイルです:
This is a simple text file for testing purpose.
では、このファイルを読み取ってみましょう:
例
この文は、入力ファイルの最初の20文字を読み取ります。ファイルポインタは、ファイル内の21文字目の位置に配置されます。
syswriteメソッド
あなたはsyswriteメソッドを使用して、ファイルに内容を書き込むことができます。syswrite メソッドを使用する場合、書き込みモードでファイルを開く必要があります。例:
例
この文は、"ABCDEF" をファイルに書き込みます。
each_byteメソッド
このメソッドはクラスFileに属します。メソッドはeach_byte文字列内の各文字を反復処理できます。次のコード例を参照してください:
例
文字が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メソッド
类 Fileは IO クラスのサブクラスです。IO クラスには、ファイルを操作するためのメソッドもあります。
IO.readlinesは IO クラス内のメソッドです。このメソッドは、ファイルの内容を1行ずつ返します。次のコードは、メソッドIO.readlinesの使用を示しています:
例
このコードでは、変数 arr は配列です。ファイルinput.txtの各行は配列 arr の要素になります。したがって、arr
IO.foreachメソッド
このメソッドも出力を1行ずつ返します。メソッドforeachとメソッドreadlinesの間の違いは、メソッドforeachがブロックと関連付けられることです。ただし、メソッドとは異なり、readlines、メソッドforeachは配列を返しません。例:
例
このコードは、ファイルtestの内容を変数 block に1行ずつ渡し、その後、出力が画面に表示されます。
ファイルの名前変更と削除
あなたはrenameとdeleteメソッドでファイルの名前変更と削除を行うことができます。
次の例は、既存のファイルの名前を変更しますtest1.txt:
例
次の例は、既存のファイルを削除しますtest2.txt:
例
ファイルモードと所有権
マスク付きのchmodメソッドを使用して、ファイルのモードまたは権限/アクセスリストを変更します:
次の例は、既存のファイルのtest.txtモードをマスク値に変更します:
例
次の表はchmodメソッドで使用できるさまざまなマスクを示しています:
| マスク | 説明 |
|---|---|
| 0700 | rwx マスク(所有者向け) |
| 0400 | r(所有者向け) |
| 0200 | w(所有者向け) |
| 0100 | x(所有者向け) |
| 0070 | rwx マスク(グループ向け) |
| 0040 | r(グループ向け) |
| 0020 | w(グループ向け) |
| 0010 | x(グループ向け) |
| 0007 | rwx マスク(その他のユーザー向け) |
| 0004 | r(その他のユーザー向け) |
| 0002 | w(その他のユーザー向け) |
| 0001 | x(その他のユーザー向け) |
| 4000 | 実行時にユーザー ID を設定 |
| 2000 | 実行時にグループ ID を設定 |
| 1000 | スワップテキストを保存します(使用後も保存されます) |
ファイルの照会
次のコマンドは、ファイルを開く前にファイルが既に存在するかどうかを確認します:
例
次のコマンドは、ファイルが実際にファイルであるかどうかを照会します:
例
次のコマンドは、指定されたファイル名がディレクトリであるかどうかを確認します:
例
次のコマンドは、ファイルが読み取り可能、書き込み可能、実行可能かどうかを確認します:
例
次のコマンドは、ファイルのサイズがゼロかどうかを確認します:
例
次のコマンドは、ファイルのサイズを返します:
例
次のコマンドは、ファイルのタイプを確認するために使用されます:
例
ftype メソッドは、次のいずれかの値を返すことでファイルのタイプを識別します:file、directory、characterSpecial、blockSpecial、fifo、link、socket、または unknown。
次のコマンドは、ファイルが作成、変更、または最後にアクセスされた時刻を確認するために使用されます:
例
Rubyにおけるディレクトリ
すべてのファイルはディレクトリに含まれており、Ruby はファイルとディレクトリを処理する方法を提供します。Fileクラスはファイルを処理するために使用され、Dirクラスはディレクトリを処理するために使用されます。
ディレクトリの参照
Ruby プログラムでディレクトリを変更するには、次を使用しますDir.chdir。次の例では、現在のディレクトリを に変更します。/usr/bin。
次を使用して Dir.pwd現在のディレクトリを確認できます:
次を使用して、Dir.entries指定されたディレクトリ内のファイルとディレクトリのリストを取得できます:
Dir.entries指定されたディレクトリ内のすべての項目を含む配列を返します。Dir.foreach同じ機能を提供します:
ディレクトリリストを取得するより簡潔な方法は、Dir の配列のようなメソッドを使用することです:
ディレクトリの作成
Dir.mkdirを使用してディレクトリを作成できます:
mkdir を使用して、新しいディレクトリ(既存のディレクトリではない)に権限を設定することもできます:
注意:マスク 755 は、所有者(owner)、グループ(group)、全員(world [anyone])の権限を rwxr-xr-x に設定します。ここで、r = read(読み取り)、w = write(書き込み)、x = execute(実行)です。
ディレクトリの削除
Dir.deleteを使用してディレクトリを削除できます。Dir.unlinkとDir.rmdir同じ機能を実行し、利便性を提供します。
ファイルの作成 & 一時ディレクトリ
一時ファイルとは、プログラムの実行中に一時的に作成されるが、永続的に保存されない情報のことです。
Dir.tmpdirは現在のシステム上の一時ディレクトリのパスを提供しますが、このメソッドはデフォルトでは使用できません。使用可能にするには、Dir.tmpdir必要な 'tmpdir' を使用する必要があります。
次を一緒に使用して、Dir.tmpdirとFile.joinプラットフォームに依存しない一時ファイルを作成できます:
このコードは一時ファイルを作成し、データを書き込み、ファイルを削除します。Ruby の標準ライブラリには、 という名前のTempfileライブラリも含まれており、一時ファイルの作成に使用できます:
組み込み関数
以下に、Ruby でファイルとディレクトリを処理するための組み込み関数の完全なリストを示します:
その他の拡張