2014-02-08 7 views
5

Ich möchte unbekannte Anzahl von Zeilen scannen, bis alle Zeilen gescannt sind. Wie mache ich das in Ruby?Ruby scan/bekommt bis EOF

Für Ex:

put returns between paragraphs 

for linebreak add 2 spaces at end 

_italic_ or **bold** 

Der Eingang ist nicht von einer 'Datei', sondern durch die STDIN.

+1

Sie meinen Sie unbekannte Anzahl von Linien werden immer als Eingabe über die Tastatur? etwas wie STDIN in einigen Codierungswettbewerben? –

Antwort

8

Verwenden IO#read (ohne length Argument, liest, bis EOF)

lines = STDIN.read 

oder verwenden gets mit nil als Argument:

lines = gets(nil) 

bezeichnen EOF, Typ Ctrl + D (Unix) oder Strg + Z (Windows).

9

Viele Möglichkeiten, das in Rubin zu tun. Die meisten in der Regel, du wirst wollen Prozess eine Zeile zu einer Zeit, die Sie tun können, zum Beispiel mit

while line=gets 
end 

oder

STDIN.each_line do |line| 
end 

oder Rubin mit dem -n Schalter ausgeführt wird, für Beispiel, das eine der obigen Schleifen impliziert (Zeile wird in $_ in jeder Iteration gespeichert und Sie können BEGIN{} und END{} hinzufügen, genau wie in awk - das ist wirklich gut für Einzeiler).

Ich würde STDIN.read nicht tun, obwohl, wie die gesamte Datei in den Speicher auf einmal gelesen wird (was schlecht sein kann, wenn die Datei sehr groß ist.)