class ARGF

ARGF und ARGV

Das ARGF-Objekt arbeitet mit dem Array der globalen Variablen ARGV zusammen, um $stdin und Dateistreams für das Ruby-Programm verfügbar zu machen.

Lesen

ARGF kann aus *Quellen*-Streams lesen, die zu einem bestimmten Zeitpunkt durch den Inhalt von ARGV bestimmt werden.

Einfachster Fall

Wenn der *aller erste* ARGF-Lesevorgang mit einem leeren ARGV ([]) auftritt, ist die Quelle $stdin.

Über die Beispiele

Viele Beispiele hier gehen davon aus, dass die Dateien foo.txt und bar.txt existieren.

$ cat foo.txt
Foo 0
Foo 1
$ cat bar.txt
Bar 0
Bar 1
Bar 2
Bar 3

Quellen in ARGV

Für jeden ARGF-Lesevorgang *außer* dem einfachsten Fall (d.h. *außer* dem *aller ersten* ARGF-Lesevorgang mit einem leeren ARGV) werden die Quellen in ARGV gefunden.

ARGF geht davon aus, dass jedes Element im Array ARGV eine potenzielle Quelle ist und eine der folgenden Optionen ist:

Jedes Element, das *nicht* eine dieser Optionen ist, sollte aus ARGV entfernt werden, bevor ARGF auf diese Quelle zugreift.

Im folgenden Beispiel

Beispiel

Der Stream-Zugriff von ARGF berücksichtigt die Elemente von ARGV von links nach rechts.

Da der Wert in ARGV ein normales Array ist, können Sie ihn manipulieren, um zu steuern, welche Quellen ARGF berücksichtigt.

Jedes Element in ARGV wird entfernt, wenn auf seine entsprechende Quelle zugegriffen wird; wenn auf alle Quellen zugegriffen wurde, ist das Array leer.

Dateipfade in ARGV

Das Array ARGV kann Dateipfade enthalten, die Quellen für das Lesen von ARGF angeben.

Dieses Programm gibt aus, was es aus den auf der Kommandozeile angegebenen Dateien liest.

$stdin in ARGV angeben

Um den Stream $stdin in ARGV anzugeben, verwenden Sie das Zeichen '-'.

Wenn kein Zeichen '-' angegeben wird, wird der Stream $stdin ignoriert (Ausnahme: siehe Specifying $stdin in ARGV).

Mischungen und Wiederholungen in ARGV

Für einen ARGF-Leser kann ARGV jede Mischung aus Dateipfaden und dem Zeichen '-', einschließlich Wiederholungen, enthalten.

Änderungen an ARGV

Das laufende Ruby-Programm kann beliebige Änderungen am ARGV-Array vornehmen; der aktuelle Wert von ARGV beeinflusst das Lesen von ARGF.

Leeres ARGV

Bei einem leeren ARGV gibt eine ARGF-Lesemethode entweder nil zurück oder löst eine Ausnahme aus, abhängig von der spezifischen Methode.

Weitere Lesemethoden

Wie oben gezeigt, liest die Methode ARGF#read den Inhalt aller Quellen in eine einzige Zeichenkette. Andere ARGF-Methoden bieten andere Möglichkeiten, auf diesen Inhalt zuzugreifen, darunter:

Über Enumerable

ARGF enthält das Modul Enumerable. Praktisch alle Methoden in Enumerable rufen die Methode each in der inkludierenden Klasse auf.

Gut zu wissen: In ARGF gibt die Methode each Daten aus den *Quellen*, *nicht* aus ARGV zurück; daher gibt z. B. ARGF#entries ein Array von Zeilen aus den Quellen zurück, nicht ein Array der Zeichenketten aus ARGV.

Schreiben

Wenn der *inplace-Modus* aktiv ist, kann ARGF in Ziel-Streams schreiben, die zu einem bestimmten Zeitpunkt durch den Inhalt von ARGV bestimmt werden.

Methoden zum Inplace-Modus

Methoden zum Schreiben