Ruby
 Computer >> コンピューター >  >> プログラミング >> Ruby

Rubyでファイルを読み書きする方法(例付き)

今日は、Rubyでファイルを読み書きして、コンテンツを抽出し、新しいファイルを作成し、必要な情報を見つける方法を学びます。

Rubyでファイルを読み書きする方法(例付き)

これから説明します

コンテンツ

  • 1Rubyでファイルを読み取る方法
  • 2Rubyでファイルに書き込む方法
  • 3つのRubyファイルメソッド
  • 4つのディレクトリ操作
  • 5FileUtilsモジュールの使用方法
  • 6まとめ
    • 6.1関連

やってみましょう!

Rubyでファイルを読み取る方法

次のようにRubyでファイルを読み取ることができます:

  1. ファイルを開くopen メソッド。
  2. ファイルを読む 、ファイル全体、行ごと、または特定のバイト数。
  3. ファイルを閉じるclose メソッド。

プロセスの詳細は次のとおりです。

Fileを使用する ファイルを開くクラス:

file = File.open("users.txt")

その結果、Fileを取得します オブジェクトですが、ファイルの内容はまだありません。

ファイルの内容は3つの方法で読み取ることができます。

まず、ファイル全体を読み取ることができます。

このように

file_data = file.read

# "user1\nuser2\nuser3\n"

複数行のファイルを使用している場合は、splitのいずれかを実行できます。 file_data 、またはreadlinesを使用します メソッドとchomp 改行文字を削除するメソッド。

file_data = file.readlines.map(&:chomp)

# ["user1", "user2", "user3"]

closeしたいファイルの操作が終わったら メモリとシステムリソースを解放します。

このように

file.close

ファイルを開いたり閉じたりする代わりにFile.readを使用できます 方法:

file_data = File.read("user.txt").split

# ["user1", "user2", "user3"]

ファイルの読み取りに関するもう1つのヒント。

一度に1行ずつファイルを処理する場合は、foreachを使用できます。 メソッド。

File.foreach("users.txt") { |line| puts line }

ファイル全体をメモリに読み込むのではなく 一度に1行ずつファイルを処理できるため、大きなファイルに役立ちます。

Rubyでファイルに書き込む方法

Rubyを使用してファイルに書き込みたい場合:

  1. ファイルを書き込みモードで開きます(「w」フラグ)
  2. writeを使用します ファイルにデータを追加する方法
  3. ブロックバージョンを使用しなかった場合は、closeを忘れないでください

File.open("log.txt", "w") { |f| f.write "#{Time.now} - User logged in\n" }

重要

これにより、以前のファイルの内容が書き換えられます!

ファイルに新しいコンテンツを追加する場合は、「w」(書き込み)フラグの代わりに「a」(追加)フラグを使用します。

ショートカットの1つは、File.writeを使用することです。 :

File.write("log.txt", "data...")

このメソッドを追加モードで使用するには :

File.write("log.txt", "data...", mode: "a")

これは、Rubyで1行のコードでファイルに書き込む最も簡単な方法です🙂

もう1つ…

配列をファイルに書き込みたい場合は、最初にそれを文字列に変換する必要があります。

方法は次のとおりです

File.write("log.txt", [1,2,3].join("\n"), mode: "a")

オブジェクトを文字列に変換するこのプロセスは、シリアル化と呼ばれます。

Rubyファイルメソッド

ファイルの読み取りと書き込み以外に、ファイルを使用して他のことを行うことができます。

たとえば、ファイルが存在するかどうかを知りたい場合があります または、現在のディレクトリのファイルのリストを取得します。

次のような方法を使用します

  • 名前の変更
  • サイズ
  • 存在しますか?
  • extname
  • ベース名
  • dirname
  • ディレクトリ?
  • ファイル?

いくつかの例を見てみましょう

# Renaming a file
File.rename("old-name.txt", "new-name.txt")

# File size in bytes
File.size("users.txt")

# Does this file already exist?
File.exists?("log.txt")

# Get the file extension, this works even if the file doesn't exists
File.extname("users.txt")
# => ".txt"

# Get the file name without the directory part
File.basename("/tmp/ebook.pdf")
# => "ebook.pdf"

# Get the path for this file, without the file name
File.dirname("/tmp/ebook.pdf")
# => "/tmp"

# Is this actually a file or a directory?
File.directory?("cats")

最後の例は、ディレクトリリストの内容をループしている場合に意味があります。

def find_files_in_current_directory
  entries = Dir.entries(".")

  entries.reject { |entry| File.directory?(entry) }
end

ファイルサイズ、権限、作成日など、ファイルの統計情報を取得することもできます。

File.stat("/tmp")

ディレクトリ操作

Dir.globの使用 特定のパターンに一致するすべてのファイルのリストを取得できます。

次にいくつかの例を示します。

# All files in current directory
Dir.glob("*")

# All files containing "spec" in the name
Dir.glob("*spec*")

# All ruby files
Dir.glob("*.rb")

この1行のコードは、現在のディレクトリから始めて、Ruby内のすべてのファイルを再帰的に一覧表示します。 :

Dir.glob("**/**")

ディレクトリのみを検索する場合は、これを使用します:

Dir.glob("**/**/")

Dirクラスを使用して、現在の作業ディレクトリを印刷することもできます。 :

Dir.pwd

ディレクトリが空かどうかを確認します:

Dir.empty?("/tmp")
# false

ディレクトリが存在するかどうかを確認します:

Dir.exists?("/home/jesus")
# true

新しいディレクトリを作成します:

Dir.mkdir("/tmp/testing")

mktmpdirを使用して一時ディレクトリを作成します:

Dir.mktmpdir do |dir|
  File.write(dir + "/log.txt", "test")
end

FileUtilsモジュールの使用方法

FileUtilsモジュール内でアクセスできる追加のファイル処理ユーティリティがいくつかあります。

たとえば、ファイルを比較できます 、ファイルをタッチします(最終アクセスと変更時刻を更新する )、または cp_rを使用してファイルとディレクトリをコピーします 。

このように

require 'fileutils'

FileUtils.compare_file("a.txt", "b.txt")
FileUtils.touch("/tmp/lock")
FileUtils.cp_r("data", "backup")

ところで、cp_rの「r」 「再帰的」の略です。

概要

File.readなどの組み込みメソッドを使用して、Rubyでファイルとフォルダーを管理する方法を学習しました。 &File.write

読んでくれてありがとう!


  1. Ruby Mapメソッドの使用方法(例付き)

    Mapは、配列、ハッシュ、範囲で使用できるRubyメソッドです。 マップの主な用途は、データを変換することです。 例 : 文字列の配列が与えられた場合、すべての文字列に目を通し、すべての文字を大文字にすることができます。 または、Userのリストがある場合 オブジェクト… 変換できます 対応するメールアドレス、電話番号、またはその他の属性のリストにそれらを追加します Userで定義 クラス。 これを行う方法を正確に見てみましょう! ルビーマップ構文 マップの構文は次のようになります: array = [a, b, c] array.map { |string| string.

  2. Windows 10 でメモリ ダンプ ファイルを読み取る方法

    PC が最近クラッシュした場合は、ブルー スクリーン オブ デス (BSOD) に直面したに違いありません。ブルー スクリーン オブ デス (BSOD) には、クラッシュの原因がリストされ、PC が突然シャットダウンします。現在、BSOD 画面は数秒間しか表示されておらず、その時点でクラッシュの原因を分析することはできません。ありがたいことに、Windows がクラッシュすると、クラッシュ ダンプ ファイル (.dmp) またはメモリ ダンプが作成され、Windows のシャットダウン直前にクラッシュに関する情報が保存されます。 BSOD 画面が表示されるとすぐに、Windows はクラ