Ruby – ファイルI / O~RUBY入門〜RUBYTUTORIAL〜

スポンサーリンク

本当にわからないとこがあった場合一人では解決できません。
『teratail』とはエンジニア特化型のQ&Aサイトです。 すべてのエンジニアさんが抱えている悩みを共有して 解決するための質問サイトです
無料なのでまずは登録して使ってみてください。メールアドレスだけで登録可能です ----------------------------------------------------------------------------------------

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.openFile.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.unlinkDir.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

前のページ

次のページ

 

スポンサーリンク

プログラミングは独学からは挫折の可能性が高いです。まずは無料体験ができる
コードキャンプが本当におすすめ。無料体験でわからないところを聞きましょう。
転職補助つき。カリキュラム終了後に転職紹介をしてくれます。