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.openとFile.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方法を使用することができます示しています。
掩码 | 描述 |
---|---|
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
ファイル、ディレクトリ、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.unlinkとDir.rmdirは 、同じ機能を実行する利便性を提供してくれます。
Dir.delete("testdir")
一時ディレクトリのファイルを作成します&
一時ファイルはプログラムの実行の過程で、単純であることに作成されますが、情報を永続的に保存されていません。
Dir.tmpdirは、デフォルトでは、現在のシステムの一時ディレクトリ、上のパスを提供しますが、使用できません。 必要な「TMPDIR 'で、Dir.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の標準ライブラリには、図書の一時ファイルの名前のライブラリは一時ファイルを作成するために使用することができます含まれています。
require 'tempfile' f = Tempfile.new('tingtong') f.puts "Hello" puts f.path f.close
組み込み関数
以下は、Rubyの組み込み関数内のファイルおよびディレクトリの完全なリストを提供します。