Contents
- 1 Ruby – ファイルI / O
- 1.1 putsステートメント
- 1.2 getsステートメント
- 1.3 putcステートメント
- 1.4 printステートメント
- 1.5 ファイルのオープンとクローズ
- 1.6 File.newメソッド
- 1.7 File.openメソッド
- 1.8 ファイルの読み書き
- 1.9 sysreadメソッド
- 1.10 syswriteメソッド
- 1.11 each_byteメソッド
- 1.12 IO.readlinesメソッド
- 1.13 IO.foreachメソッド
- 1.14 ファイル名の変更と削除
- 1.15 ファイルモードと所有権
- 1.16 ファイルに関するお問い合わせ
- 1.17 Rubyのディレクトリ
- 1.18 ディレクトリを移動する
- 1.19 ディレクトリの作成
- 1.20 ディレクトリの削除
- 1.21 ファイルと一時ディレクトリの作成
- 1.22 スポンサーリンク
Ruby – ファイルI / O
Rubyは、カーネルモジュールに実装されているI / O関連のメソッド全体を提供します。すべてのI / OメソッドはクラスIOから派生しています。
この章では、Rubyで利用できる基本入出力機能について説明します。より多くの機能については、Ruby Class 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
putcステートメント
文字列全体を画面に出力するputs文とは異なり、putc文を使用して一度に1文字ずつ出力することができます。
例
次のコードの出力は文字H –
#!/usr/bin/ruby str = "Hello Ruby!" putc str
これにより、次の結果が生成されます。
H
printステートメント
印刷ステートメントは、に似ているプットの声明。唯一の違いは、内容を印刷した後にputs文が次の行に移動しますが、print文ではカーソルが同じ行に置かれる点です。
例
#!/usr/bin/ruby print "Hello World" print "Good Morning"
これにより、次の結果が生成されます。
Hello WorldGood Morning
ファイルのオープンとクローズ
これまでは、標準的な入力と出力を読み書きしていました。さて、実際のデータファイルをどのようにプレイするかを見ていきます。
File.newメソッド
モード文字列に従って、File.newメソッドを使用して読み込み、書き込み、またはその両方を行うFileオブジェクトを作成できます。最後に、File.closeメソッドを使用してそのファイルを閉じることができます。
構文
aFile = File.new("filename", "mode") # ... process the file aFile.close
File.openメソッド
あなたは使用することができますFile.openの新しいファイルオブジェクトを作成し、ファイルにそのファイルオブジェクトを割り当てるための方法を。しかし、その間に1差があるFile.openとFile.new方法は。違いは、File.openメソッドはブロックに関連付けることができますが、File.newメソッドを使用して同じことを行うことはできないという点です。
File.open("filename", "mode") do |aFile| # ... process the file end
ファイルの読み書き
「シンプルな」I / Oのために使用してきたのと同じ方法が、すべてのファイルオブジェクトで利用できます。したがって、標準入力から行を読み込み、aFile.getsはファイルオブジェクトaFileから行を読み込みます。
しかし、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.each_byte {|ch| putc ch; putc ?. } else puts "Unable to open file!" end
文字は変数chに1つずつ渡され、次のように画面に表示されます。
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クラスのメソッドの1つはIO.readlinesです。このメソッドは、ファイルの内容を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メソッド
また、このメソッドは出力を1行ずつ返します。メソッド間の差のforeachとメソッドreadlinesは、メソッドということであるforeachのをブロックに関連付けられています。しかし、readlinesメソッドとは異なり、foreachメソッドは配列を返しません。例えば -
#!/usr/bin/ruby IO.foreach("input.txt"){|block| puts block}
このコードは、ファイルの内容を通過する試験変数ブロックに行ずつ、その後、出力が画面に表示されます。
ファイル名の変更と削除
あなたは、名前を変更してのRubyでプログラムでファイルを削除することができ、リネームや削除方法を。
次に、既存のファイルの名前を変更する例を示します。test1.txt –
#!/usr/bin/ruby # Rename a file from test1.txt to test2.txt File.rename( "test1.txt", "test2.txt" )
次に、既存のファイルを削除する例を示します。test2.txt –
#!/usr/bin/ruby # Delete file test2.txt File.delete("test2.txt")
ファイルモードと所有権
マスクを使用してchmodメソッドを使用して、ファイルのモードまたはアクセス権/アクセスリストを変更する –
以下は、既存のファイルtest.txtのモードをマスク値に変更する例です。
#!/usr/bin/ruby file = File.new( "test.txt", "w" ) file.chmod( 0755 )
ファイルに関するお問い合わせ
次のコマンドは、ファイルを開く前にファイルが存在するかどうかをテストします。
#!/usr/bin/ruby File.open("file.rb") if File::exists?( "file.rb" )
次のコマンドは、ファイルが本当にファイルであるかどうかを調べます。
#!/usr/bin/ruby # This returns either true or false File.file?( "text.txt" )
次のコマンドは、指定されたファイル名がディレクトリであるかどうかを調べます。
#!/usr/bin/ruby # a directory File::directory?( "/usr/local/bin" ) # => true # a file 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" ) # => Fri May 09 10:06:37 -0700 2008 File::mtime( "text.txt" ) # => Fri May 09 10:44:44 -0700 2008 File::atime( "text.txt" ) # => Fri May 09 10:45:01 -0700 2008
Rubyのディレクトリ
すべてのファイルはさまざまなディレクトリに格納されており、Rubyもこれらのファイルを処理する上で問題はありません。一方、ファイルのクラスには、ファイルを処理する、ディレクトリがで扱われるのDirクラス。
ディレクトリを移動する
Rubyプログラム内のディレクトリを変更するには、以下のようにDir.chdirを使用します。この例では、現在のディレクトリを/ usr / binに変更します。
Dir.chdir("/usr/bin")
あなたは、現在のディレクトリがである何かを見つけることができますDir.pwd –
puts Dir.pwd # This will return something like /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
前のページ
次のページ