Latest web development tutorials

Rubyのファイル入出力

Rubyは、カーネル(カーネル)モジュールに実装I / O関連のメソッドのセットを提供します。 すべてのI / O方法はIOクラスから派生されます。

IOは読み取り、書き込み、取得、プット、など、すべてのクラスベースのアプローチ、提供のreadline、getc関数とのprintf。

このセクションでは、利用可能なすべてのRubyベースのI / O機能を説明します。 より多くの機能については、RubyのIOクラスを参照してください。

文を置きます

前のセクションでは、変数に割り当てられ、その後、プット文プリントアウトを使用します。

文は、プログラムが変数に格納された値が表示されていることを示します。 これは、各行の末尾に新しい行を追加します。

#!/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

ステートメントを取得します

ステートメントは、STDINと呼ばれる標準画面からのユーザ入力を取得するために使用することができます

次のコードは、ステートメントを取得し使用する方法を示します。 コードは、変数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ステートメント

PUTC文は出力文字列に使用することができるが、別のステートメントを置き、文は、画面に文字列全体の結果を出力します

次のコードだけで、文字Hの出力:

#!/usr/bin/ruby

str="Hello Ruby!"
putc str

上の例の出力は実行します。

H

print

print文と類似の文を置きます。 唯一の違いは、文が入れた後にprint文の使用は、カーソルが同一線上に位置している出力は、次の行にジャンプするということです。

#!/usr/bin/ruby

print "Hello World"
print "Good Morning"

上の例の出力は実行します。

Hello WorldGood Morning

ファイルを開くと閉じます

今のところ、あなたが読んで、標準入力と標準出力に書かなければなりません。 今、私たちはどのように実際のデータ・ファイルを見ていきます。

File.new方法

あなたは、Fileオブジェクトがモード・パラメータに応じて、File.new方法を読み取り、書き込み、または読み取りおよび書き込み、読み出しおよび書き込みのアクセス許可するために使用されて作成することができます。 最後に、あなたはファイルをクローズするFile.closeメソッドを使用することができます。

文法

aFile = File.new("filename", "mode")
   # ... 处理文件
aFile.close

File.open方法

あなたはFile.openメソッドを使用して、新しいファイル・オブジェクトを作成することができ、およびオブジェクトは、ファイル、ファイルに割り当てられています。 しかし、File.openFile.newメソッド間の違いが1つあります。 違いは、File.open方法は、ブロックではなく、File.new方法に関連付けることができますです。

File.open("filename", "mode") do |aFile|
   # ... process the file
end

次の表は、異なるモードで開いているファイルを一覧表示します:

模式描述
r只读模式。文件指针被放置在文件的开头。这是默认模式。
r+读写模式。文件指针被放置在文件的开头。
w只写模式。如果文件存在,则重写文件。如果文件不存在,则创建一个新文件用于写入。
w+读写模式。如果文件存在,则重写已存在的文件。如果文件不存在,则创建一个新文件用于读写。
a只写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于写入。
a+读写模式。如果文件存在,则文件指针被放置在文件的末尾。也就是说,文件是追加模式。如果文件不存在,则创建一个新文件用于读写。

ファイルの読み書き

単純な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方法

このメソッドは、クラスファイルに属します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方法

Fileクラスは、クラスIOのサブクラスです。 IOクラスは、ファイルを操作するためのいくつかの方法があります。

IO.readlinesIOクラスはメソッドです。 プログレッシブ方式は、ファイルの内容を返します。 次のコードは、IO.readlines使用する方法を示しています。

#!/usr/bin/ruby

arr = IO.readlines("input.txt")
puts arr[0]
puts arr[1]

このコードでは、変数は配列arrです。 各行は、要素INPUT.TXT配列arrファイルです。 したがって、ARR [0]最初の行が含まれます、そして編曲:[1]は、ファイルの2行目が含まれます。

IO.foreach方法

この方法はまた、プログレッシブ出力を返します。 異なる方法や方法のreadlines間のforeachのは、メソッドのforeachブロックを関連付けられています。 しかし、代わりに配列を返す方法のreadlines、foreachの方法とは異なり。 例えば:

#!/usr/bin/ruby

IO.foreach("input.txt"){|block| puts block}

このコードは、出力は画面に表示されます、変数プログレッシブブロックを渡されたファイルの内容をテストします。

名前を変更し、ファイルを削除します

名前を変更し、ファイルの名前変更し、メソッドを削除する削除することができます。

次の例では、すでに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方法を使用することができます示しています。

掩码描述
0700rwx 掩码,针对所有者
0400r ,针对所有者
0200w ,针对所有者
0100x ,针对所有者
0070rwx 掩码,针对所属组
0040r ,针对所属组
0020w ,针对所属组
0010x ,针对所属组
0007rwx 掩码,针对其他人
0004r ,针对其他人
0002w ,针对其他人
0001x ,针对其他人
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

ファイル、ディレクトリ、characterSpecial、blockSpecial:FTYPE方法は、 ファイルの種類を識別するために、次の値を返し、FIFO、リンク、ソケットまたは未知を。

次のコマンドは、ファイルをチェックするために使用され、作成、変更、または最終アクセス時刻まし​​た:

#!/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は、プロセスのファイルとディレクトリを提供します。 ディレクトリを作業用のファイル、ディレクトリクラスを扱うためのクラスファイル

カタログを閲覧します

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を採用した新しいディレクトリ(いない既存のディレクトリ)にアクセス許可を設定することができます。

注:= X、書き込み書き込み= W、R =が読み読みグループ(グループ)に属している、誰も(世界[誰])パーミッションrwxr-xr-xとなって、セットの所有者755(所有者)をマスク実行を実行します。

Dir.mkdir( "mynewdir", 755 )

ディレクトリを削除します

ディレクトリを削除するために使用することDir.delete。Dir.unlinkDir.rmdirは 、同じ機能を実行する利便性を提供してくれます。

Dir.delete("testdir")

一時ディレクトリのファイルを作成します&

一時ファイルはプログラムの実行の過程で、単純であることに作成されますが、情報を永続的に保存されていません。

Dir.tmpdirは、デフォルトで、現在のシステムの一時ディレクトリ、上のパスを提供しますが、使用できません。 必要な「TMPDIR 'で、Dir.tmpdirを利用できるようにするためには必要です。

あなたはDir.tmpdirFile.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の標準ライブラリには、図書の一時ファイルの名前のライブラリは一時ファイルを作成するために使用することができます含まれています。

require 'tempfile'
   f = Tempfile.new('tingtong')
   f.puts "Hello"
   puts f.path
   f.close

組み込み関数

以下は、Rubyの組み込み関数内のファイルおよびディレクトリの完全なリストを提供します。