07/09/2018, 10:54

3 Cách Khác Nhau Để Đọc File Content Trong Ruby

Tương tự như các ngôn ngữ lập trình khác, Ruby cung cấp các phương thức khác nhau để hỗ trợ việc đọc nội dung file trên hệ thống. Trong bài viết này chúng ta sẽ cùng tìm hiểu các cách khác nhau để thực hiện tác vụ đọc nội dung file sử dụng ngôn ngữ lập trình Ruby. Kết thúc bài viết bạn cũng sẽ hiểu ...

Tương tự như các ngôn ngữ lập trình khác, Ruby cung cấp các phương thức khác nhau để hỗ trợ việc đọc nội dung file trên hệ thống. Trong bài viết này chúng ta sẽ cùng tìm hiểu các cách khác nhau để thực hiện tác vụ đọc nội dung file sử dụng ngôn ngữ lập trình Ruby. Kết thúc bài viết bạn cũng sẽ hiểu được sự khác biệt khi sử dụng các cách khác nhau để đọc file content.

1. Sử Dụng File.open()

Sử dụng method .open() trong File class để mở file trên hệ thống, method này có hai tham số:

  • Tham số đầu là địa chỉ đường dẫn tới file
  • Tham số thứ hai là mode sử dụng khi mở file. Giá trị mặc định của tham số là r hay read.

Ví dụ:

f = File.open("./sample.txt", "r")

Tiếp theo gọi method .each_line() trên f class để đọc nội dung file theo từng dòng:

f.each_line do |line|
  puts line
end

Sau khi đọc xong nội dung file bạn cần gọi method .close() trên f object để đóng file đang mở điều này sẽ giúp tối ưu tài nguyên trên hệ thống:

f.close

Khi sử dụng method .open() trong File class bạn có thể truyền vào đối số là một block như sau:

File.open("./sample.txt", "r") do |f|
  f.each_line do |line|
    puts line
  end
end

Lúc này khi đoạn code trong block kết thúc Ruby sẽ tự động đóng file đang mở lại và do đó bạn không cần gọi f.close() như trong trường hợp trước đó.

2. Sử Dụng File.foreach()

Tương tự như File.open(), chúng ta cũng có thể sử dụng method .foreach() trong File class để đọc nội dung file như sau:

File.foreach("./sample.txt") {
    |x| print x
}

Trong trường hợp này thì khi kết thúc việc đọc nội dung file, Ruby sẽ tự động thực hiện việc đóng file đang mở.

Do File class được kế thừa từ IO class do đó chúng ta cũng có thể sử dụng method .foreach() trong IO để thực hiện cùng tác vụ:

IO.foreach("./sample.txt") {
  |line| puts line
}

3. Sử Dụng File.read()

Một method khác .read() trong File class cũng được sử dụng để đọc nội dung file:

File.read("./sample.txt").each {
  |line| puts line
}

Hoặc tương tự:

puts File.read("./sample.txt")

Trong cả hai trường hợp trên thì khi kết thúc việc đọc nội dung file, Ruby cũng sẽ tự động thực hiện việc đóng file đang mở.

Bạn cần lưu ý rằng sử dụng File.read() như ở trên khác với các cách làm trước đó ở chỗ toàn bộ nội dung file sẽ được đọc một lần thay vì đọc từng dòng như trước đó. Điều này có ưu điểm cũng có nhược điểm.

Ưu điểm việc đọc file được tiến hành một lần và không phải chia ra thành nhiều bước. Tuy nhiên nhược điểm (rất lớn) ở chỗ khi phải đọc các file có kích thước lớn cách làm này sẽ có thể gây ra hiện tượng tràn bộ nhớ do toàn bộ nội dung file được tải vào memory trên hệ thống. Do đó bạn chỉ nên sử dụng File.read() trong trường hợp bạn biết trước được rằng kích thước của file là nhỏ. Ngược lại bạn nên sử dụng các phương pháp trước đó.

0