Про ARGF в Ruby

ARGF в Ruby - це об’єкт, який дозволяє програмі читати введення з файлів, переданих як аргументи командного рядка, або зі стандартного введення (stdin), якщо аргументи відсутні. Це дозволяє програмі легко працювати з введенням незалежно від того, чи воно знаходиться в файлах або на вході з клавіатури.

Отже, ARGF управляє потоками вводу з різних джерел. Він представляє собою поєднання об’єктів класу File і об’єкта класу IO (що включає стандартний ввід). Це робить його дуже зручним для зчитування великих обсягів даних, що розміщені в кількох файлах або отриманих через конвеєр.

Основні риси та функціональність класу ARGF

  1. Потоковий ввід з файлів. ARGF дозволяє програмі читати введення з кількох файлів. Це може бути корисно, коли вам потрібно обробити дані з кількох файлів без необхідності відкривати їх окремо.

  2. Використання як Enumerable. ARGF є Enumerable, тому ви можете використовувати методи, такі як each, map, select, тощо, для обробки кожного рядка введення.

  3. Автоматичне визначення введення. Якщо аргументи командного рядка не вказані, ARGF автоматично використовує стандартний ввід (stdin). Це дозволяє програмам працювати як з введенням з файлів, так і з введенням з клавіатури.

  4. Зручний доступ до інформації про файли. ARGF має доступ до інформації про файли через спеціальні змінні, такі як ARGF.filename (поточний файл) та ARGF.file.lineno (номер поточного рядка у файлі).

Основні методи

  1. ARGF.each {|line| ... }: Цей метод дозволяє ітеруватися по кожному рядку вводу. Викликає блок для кожного рядка вводу, зчитуючи його по черзі з кожного файлу, який передається через аргументи командного рядка або стандартний ввід.

  2. ARGF.file: Повертає поточний файл, з якого читається ввід. Це може бути корисно, якщо вам потрібно знати ім’я файлу, з якого вводиться певний рядок.

  3. ARGF.filename: Повертає ім’я поточного файлу, з якого читається ввід.

  4. ARGF.close: Закриває поточний файл.

Приклад використання ARGF:

# Припустимо, ми маємо файли file1.txt та file2.txt
# file1.txt містить рядок "Hello"
# file2.txt містить рядок "World"

ARGF.each do |line|
  puts line
end

# Виведе:
# Hello
# World

У цьому прикладі ARGF автоматично зчитує рядки з обох файлів і виводить їх. Якщо б не було файлів, або якщо аргументи командного рядка не були передані, вводом для ARGF б став стандартний ввід (stdin).