Ruby-input-output
Ruby-ファイルI/O
Rubyは、Kernelモジュールに実装されたI/O関連のメソッドのセット全体を提供します。 すべてのI/Oメソッドは、クラスIOから派生しています。
クラス_IO_は、read、write、gets、puts、readline、getc、、_ printf_などのすべての基本メソッドを提供します。
この章では、Rubyで利用可能なすべての基本的なI/O関数について説明します。 その他の機能については、Ruby Class _IO_を参照してください。
putsステートメント
前の章では、変数に値を割り当て、_puts_ステートメントを使用して出力を印刷しました。
_puts_ステートメントは、変数に格納されている値を表示するようにプログラムに指示します。 これにより、書き込む各行の最後に新しい行が追加されます。
例
これは、次の結果を生成します-
getsステートメント
_gets_ステートメントを使用して、STDINと呼ばれる標準画面からユーザーからの入力を取得できます。
例
次のコードは、getsステートメントの使用方法を示しています。 このコードは、ユーザーに値を入力するように促します。値は変数valに格納され、最終的にSTDOUTに出力されます。
これは、次の結果を生成します-
putcステートメント
文字列全体を画面に出力する_puts_ステートメントとは異なり、_putc_ステートメントは一度に1文字を出力するために使用できます。
例
次のコードの出力は、文字Hです-
これは、次の結果を生成します-
印刷ステートメント
_print_ステートメントは_puts_ステートメントに似ています。 唯一の違いは、_puts_ステートメントは内容を印刷した後に次の行に移動するのに対して、_print_ステートメントではカーソルが同じ行に配置されることです。
例
これは、次の結果を生成します-
ファイルの開閉
これまで、標準入出力の読み取りと書き込みを行ってきました。 ここで、実際のデータファイルを再生する方法を見ていきます。
File.newメソッド
モード文字列に応じて、_File.new_メソッドを使用して読み取り、書き込み、またはその両方を行う_File_オブジェクトを作成できます。 最後に、_File.close_メソッドを使用してそのファイルを閉じることができます。
構文
File.openメソッド
_File.open_メソッドを使用して、新しいファイルオブジェクトを作成し、そのファイルオブジェクトをファイルに割り当てることができます。 ただし、_File.open_メソッドと_File.new_メソッドには1つの違いがあります。 違いは、_File.open_メソッドをブロックに関連付けることができますが、_File.new_メソッドを使用して同じことを実行できないことです。
____これは、ファイルを開くさまざまなモードのリストです-
Sr.No. | Modes & Description |
---|---|
1 |
r 読み取り専用モード。 ファイルポインタはファイルの先頭に置かれます。 これがデフォルトのモードです。 |
2 |
r+ 読み書きモード。 ファイルポインタはファイルの先頭にあります。 |
3 |
w 書き込み専用モード。 ファイルが存在する場合はファイルを上書きします。 ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。 |
4 |
w+ 読み書きモード。 ファイルが存在する場合、既存のファイルを上書きします。 ファイルが存在しない場合、読み取りおよび書き込み用の新しいファイルを作成します。 |
5 |
a 書き込み専用モード。 ファイルが存在する場合、ファイルポインタはファイルの末尾にあります。 つまり、ファイルは追加モードになっています。 ファイルが存在しない場合は、書き込み用の新しいファイルを作成します。 |
6 |
a+ 読み取りおよび書き込みモード。 ファイルが存在する場合、ファイルポインタはファイルの末尾にあります。 ファイルが追加モードで開きます。 ファイルが存在しない場合、読み取りおよび書き込み用の新しいファイルが作成されます。 |
ファイルの読み書き
「単純な」I/Oに使用してきたのと同じメソッドが、すべてのファイルオブジェクトに使用できます。 したがって、getsは標準入力から行を読み取り、_aFile.gets_はファイルオブジェクトaFileから行を読み取ります。
ただし、I/Oオブジェクトは、生活を楽にするアクセス方法の追加セットを提供します。
sysreadメソッド
メソッド_sysread_を使用して、ファイルの内容を読み取ることができます。 sysreadメソッドを使用する場合、どのモードでもファイルを開くことができます。 たとえば-
以下は入力テキストファイルです-
今、このファイルを読んでみましょう-
このステートメントは、ファイルの最初の20文字を出力します。 これで、ファイルポインターはファイルの21番目の文字に配置されます。
syswriteメソッド
メソッドsyswriteを使用して、コンテンツをファイルに書き込むことができます。 syswriteメソッドを使用するときは、ファイルを書き込みモードで開く必要があります。 たとえば-
このステートメントは、「ABCDEF」をファイルに書き込みます。
each_byteメソッド
このメソッドは_File_クラスに属します。 メソッド_each_byte_は常にブロックに関連付けられています。 次のコードサンプルを検討してください-
文字は変数chに1つずつ渡され、次のように画面に表示されます-
IO.readlinesメソッド
クラス_File_は、クラスIOのサブクラスです。 クラスIOには、ファイルを操作するために使用できるいくつかのメソッドもあります。
IOクラスメソッドの1つは_IO.readlines_です。 このメソッドは、ファイルの内容を1行ずつ返します。 次のコードは、メソッド_IO.readlines_の使用を表示します-
このコードでは、変数arrは配列です。 ファイル_input.txt_の各行は、配列arrの要素になります。 したがって、arr [0]には最初の行が含まれ、arr [1]にはファイルの2行目が含まれます。
IO.foreachメソッド
このメソッドは、行ごとに出力も返します。 メソッド_foreach_とメソッド_readlines_の違いは、メソッド_foreach_がブロックに関連付けられていることです。 ただし、メソッド_readlines_とは異なり、メソッド_foreach_は配列を返しません。 たとえば-
このコードは、ファイル_test_の内容を1行ずつ変数ブロックに渡し、出力が画面に表示されます。
ファイルの名前変更と削除
_rename_および_delete_メソッドを使用して、Rubyを使用してプログラムでファイルの名前を変更したり削除したりできます。
以下は、既存のファイル_test1.txt_の名前を変更する例です-
以下は、既存のファイル_test2.txt_を削除する例です-
ファイルモードと所有権
マスクを使用して_chmod_メソッドを使用して、ファイルのモードまたは権限/アクセスリストを変更します-
以下は、既存のファイル_test.txt_のモードをマスク値に変更する例です-
____次は、_chmod_メソッドに異なるマスクを選択するのに役立つテーブルです-
Sr.No. | Mask & Description |
---|---|
1 |
0700 所有者のrwxマスク |
2 |
0400 所有者のr |
3 |
0200 所有者のw |
4 |
0100 所有者のx |
5 |
0070 グループのrwxマスク |
6 |
0040 グループのr |
7 |
0020 グループのw |
8 |
0010 グループのx |
9 |
0007 その他のrwxマスク |
10 |
0004 他のr |
11 |
0002 他のw |
12 |
0001 xはその他 |
13 |
4000 実行時にユーザーIDを設定する |
14 |
2000 実行時にグループIDを設定 |
15 |
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は、パーミッションの所有者、グループ、ワールド[誰でも]をrwxr-xr-xに設定します(r =読み取り、w =書き込み、x =実行)。
ディレクトリを削除する
_Dir.delete_を使用して、ディレクトリを削除できます。 _Dir.unlink_と_Dir.rmdir_はまったく同じ機能を実行し、便宜上提供されています。
ファイルと一時ディレクトリの作成
一時ファイルとは、プログラムの実行中に短時間作成される可能性のあるファイルですが、情報の永続的な保存場所ではありません。
_Dir.tmpdir_は、現在のシステム上の一時ディレクトリへのパスを提供しますが、このメソッドはデフォルトでは使用できません。 _Dir.tmpdir_を使用可能にするには、require 'tmpdir’を使用する必要があります。
_File.join_で_Dir.tmpdir_を使用して、プラットフォームに依存しない一時ファイルを作成できます-
このコードは、一時ファイルを作成し、データを書き込み、削除します。 Rubyの標準ライブラリには、一時ファイルを作成できる_Tempfile_というライブラリも含まれています-
組み込み関数
ここにファイルとディレクトリを処理するためのルビー組み込み関数があります-
- リンク:/ruby/ruby_file_methods [ファイルクラスとメソッド]。
- リンク:/ruby/ruby_dir_methods [Dirクラスとメソッド]。