English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Rubyは一式のI/O に関連するメソッドは、カーネル(Kernel)モジュールで実装されています。すべての I/O メソッドは IO クラスから派生しています。
类 IO すべての基本的なメソッドが提供されています。 read、write、gets、puts、readline、getc および printf。
この章では、Rubyで利用できる基本的な I/関数についてもっと詳しく知りたい場合は、Rubyの IO クラス。
前の章では、変数に割り当て、それを使用して 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 文は STDIN からユーザー入力を取得するために使用されます。
以下のコードは、gets 文を使う方法を示しています。このコードはユーザーに値を入力させ、その値が変数 val に格納され、最後に STDOUT に表示されます。
#!/usr/bin/ruby puts "Enter a value :" val = gets puts val
上記の例の実行結果は以下の通りです:
Enter a value : This is entered value This is entered value
与 puts 文は異なります。puts 文は整个字符串输出到屏幕上,而 putc 文はそれぞれの文字を順次出力するために使用できます。
以下のコードの出力は文字 H だけです:
#!/usr/bin/ruby str="Hello Ruby!" putc str
上記の例の実行結果は以下の通りです:
H
print 文と puts 文は似ていますが、 puts 文は出力内容の後に次の行に移動しますが、 print 文が書かれた行に光標が位置します。
#!/usr/bin/ruby print "Hello World" print "Good Morning"
上記の例の実行結果は以下の通りです:
Hello WorldGood Morning
今までに、標準入出力への読み取りと書き込みを行いました。今、実際のデータファイルの操作方法を見てみましょう。
以下のように使用できます: File.new 方法で作成了一个 File オブジェクトは読み取り、書き込み、または読み書きに使用されます。読み書き権は mode パラメータに依存します。最後に、 File.close 方法でファイルを閉じます。
aFile = File.new("filename", "mode") # ... ファイル処理 aFile.close
以下のように使用できます: File.open 方法は新しい file オブジェクトを作成し、その file オブジェクトをファイルに割り当てますが、File.open および File.new 方法間には少し異なります。異なる点は、 File.open 方法はブロックに関連付けられますが、 File.new 方法はできません。
File.open("filename", "mode") do |aFile| # ... ファイルを処理します end
以下の表に、ファイルをオープンする際の異なるモードが示されています:
モード | 描述 |
---|---|
r | 只読みモード。ファイルポインタはファイルの先頭に置かれます。これはデフォルトのモードです。 |
r+ | 読み取り書き込みモード。ファイルポインタはファイルの先頭に置かれます。 |
w | 書き込みモード。ファイルが存在する場合、ファイルを上書きします。ファイルが存在しない場合、書き込み用の新しいファイルを作成します。 |
w+ | 読み取り書き込みモード。ファイルが存在する場合、既存のファイルを上書きします。ファイルが存在しない場合、読み取り書き込み用の新しいファイルを作成します。 |
a | 書き込みモード。ファイルが存在する場合、ファイルポインタはファイルの末尾に置かれます。つまり、追加モードです。ファイルが存在しない場合、書き込み用の新しいファイルを作成します。 |
a+ | 読み取り書き込みモード。ファイルが存在する場合、ファイルポインタはファイルの末尾に置かれます。つまり、追加モードです。ファイルが存在しない場合、読み取り書き込み用の新しいファイルを作成します。 |
シンプルなI/Oのメソッドはすべてのfileオブジェクトに適用できます。したがって、getsは標準入力から一行を読み取ります。aFile.gets ファイルオブジェクトaFileから一行を読み取ります。
ただし、I/O オブジェクトは追加設定のアクセス方法を提供し、便利にしてくれます。
以下のメソッドを使用できます。 sysread ファイルの内容を読み取るために、sysreadを使用します。ファイルをどのモードでもオープンできます。例えば:
以下は入力テキストファイルです:
これはテストのために使用されるシンプルなテキストファイルです。
このファイルを読み取ろうとしてみましょう:
#!/usr/bin/ruby aFile = File.new("input.txt", "r") if aFile content = aFile.sysread(20) puts content else ファイルをオープンできません!と表示します。 end
このステートメントは入力ファイルの先頭 20 文字。ファイルポインタはファイルの第 21 文字の位置
以下のメソッドを使用できます。 syswrite ファイルに内容を書き込むための方法として、syswriteを使用します。ファイルを書き込みモードでオープンする必要があります。例えば:
#!/usr/bin/ruby aFile = File.new("input.txt", "r+) if aFile aFile.syswrite("ABCDEF") else ファイルをオープンできません!と表示します。 end
このステートメントは「ABCDEF」をファイルに書き込みます。
このメソッドはクラスに属しています。 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 ファイルをオープンできません!と表示します。 end
字符一个接着一个被传到变量 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...
类 File 是类 IO 的一个子类。类 IO 也有一些用于操作文件的方法。
IO.readlines 是 IO 类中的一个方法。该方法逐行返回文件的内容。下面的代码显示了方法 IO.readlines 的使用:
#!/usr/bin/ruby arr = IO.readlines("input.txt") puts arr[0] puts arr[1]
在这段代码中,变量 arr 是一个数组。文件 input.txt 的每一行将是数组 arr 中的一个元素。因此,arr[0] 将包含第一行,而 arr[1] 将包含文件的第二行。
该方法也逐行返回输出。方法 foreach 与方法 readlines 之间不同的是,方法 foreach 与块相关联。但是,不像方法 readlines,方法 foreach 不是返回一个数组。例如:
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
这段代码将把文件 test 的内容逐行传给变量 block,然后输出将显示在屏幕上。
以下のように、現在のディレクトリを変更します: 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 ,所属グループに対して |
0010 | x ,所属グループに対して |
0007 | rwx マスク,他人に対して |
0004 | r ,他人に対して |
0002 | w ,他人に対して |
0001 | x ,他人に対して |
4000 | 実行時にユーザー ID を設定します |
2000 | 実行時に所属グループ ID を設定します |
1000 | 交換テキストを保存し、使用後に保存もされます |
以下のコマンドは、ファイルを開く前にファイルが存在するかどうかを確認します:
#!/usr/bin/ruby File.open("file.rb") if File::exists?("file.rb")
以下のコマンドは、ファイルが実際にファイルかどうかを確認します:
#!/usr/bin/ruby # trueまたはfalseを返します File.file?("text.txt")
以下のコマンドは、指定されたファイル名がディレクトリかどうかを確認します:
#!/usr/bin/ruby # ディレクトリ File::directory?("/usr/local/bin" # => true # ファイル File::directory?("file.rb") # => false
以下のコマンドは、ファイルが読み取り、書き込み、実行可能かどうかを確認します:
#!/usr/bin/ruby File.readable?("test.txt") # => true File.writable?("test.txt") # => true File.executable?("test.txt") # => false
以下のコマンドは、ファイルのサイズがゼロかどうかを確認します:
#!/usr/bin/ruby File.zero?("test.txt") # => true
以下のコマンドは、ファイルのサイズを返します:
#!/usr/bin/ruby File.size?("text.txt") # => 1002
以下のコマンドは、ファイルのタイプを確認するために使用されます:
#!/usr/bin/ruby File::ftype("test.txt") # => file
ftype メソッドは、以下のいずれかの値を返してファイルのタイプを識別します:file、 directory、 characterSpecial、 blockSpecial、 fifo、 link、 socket または unknown。
以下のコマンドは、ファイルが作成、変更、最後にアクセスされた時間を確認するために使用されます:
#!/usr/bin/ruby File::ctime("test.txt") # => 金曜日 5月 09 10:06:37 -0700 2008 File::mtime("text.txt") # => 金曜日 5月 09 10:44:44 -0700 2008 File::atime("text.txt") # => 金曜日 5月 09 10:45:01 -0700 2008
すべてのファイルはディレクトリに含まれています。Rubyはファイルとディレクトリの処理方法を提供します。File Fileクラスを使用してファイルを処理します。Dir Dirクラスを使用してディレクトリを処理します。
Rubyプログラムでディレクトリを変更するには、以下のように使用します: Dir.chdir。以下の例では、現在のディレクトリを変更します: /usr/bin。
Dir.chdir("/usr/bin")
以下のように、現在のディレクトリを変更します: Dir.pwd 現在のディレクトリを確認します:
puts Dir.pwd # 現在のディレクトリを返します、 /usr/bin
以下のように使用できます: Dir.entries 指定されたディレクトリ内のファイルとディレクトリリストを取得します:
puts Dir.entries("/usr/bin").join(' ')
Dir.entries 指定されたディレクトリ内のすべての項目を含む配列を返します。Dir.foreach 同じ機能を提供します:
Dir.foreach("/usr/bin") do |entry| puts entry end
Dirのクラスメソッドを使用して、ディレクトリリストを取得するより簡潔な方法があります:
Dir["/usr/bin/*"]
Dir.mkdir ディレクトリの作成に使用できます:
Dir.mkdir("mynewdir")
また、mkdirを使用して新しいディレクトリ(既存のディレクトリではありません)上の権限を設定することもできます:
注意:マスク 755 所有者(owner)、所属グループ(group)、全員(world [anyone])の権限を rwxr に設定します。-xr-x、r = read 読み取り、w = write 書き込み、x = execute 実行。
Dir.mkdir( "mynewdir", 755 )
Dir.delete ディレクトリの削除に使用できます。Dir.unlink および Dir.rmdir 同様の機能を提供して、便利さを提供します。
Dir.delete("testdir")
一時ファイルは、プログラムの実行中に一時的に作成されるが、永続的に保存されない情報です。
Dir.tmpdir 現在のシステム上の一時ディレクトリのパスを提供します。ただし、このメソッドはデフォルトでは利用できません。 Dir.tmpdir 使用するためには、必須の 'tmpdir' が必要です。このメソッドは、デフォルトでは利用できないですが、
以下のように使用できます: Dir.tmpdir および File.join これらを一緒に使用して、プラットフォームに依存しない一時ファイルを作成します:
require 'tmpdir' tempfilename = File.join(Dir.tmpdir, "tingtong") tempfile = File.new(tempfilename, "w") tempfile.puts "This is a temporary file" tempfile.close File.delete(tempfilename)
このコードは一時ファイルを作成し、データを書き込み、ファイルを削除します。Rubyの標準ライブラリには、 Tempfile のライブラリ、このライブラリは一時ファイルを作成するために使用できます:
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
以下に、Ruby でファイルとディレクトリを処理する内蔵関数の完全なリストを提供します: