Wie konvertiert man STDIN-Inhalte in ein Array?

7

Ich habe eine Datei INPUT, die folgenden Inhalt hat:

%Vor%

Ich möchte mein Skript wie folgt ausführen: script.rb & lt; INPUT und lassen Sie den Inhalt der INPUT-Datei in ein Array konvertieren, indem Sie das neue Zeilenzeichen aufteilen. Also, ich hätte etwas wie myArray = [123,456,789]. Hier ist, was ich versucht habe und habe nicht viel Glück:

%Vor%

Ich erwarte, dass dies 3 druckt, aber ich bekomme 15. Ich bin hier wirklich verwirrt. Irgendwelche Zeiger?

    
miketaylr 14.02.2009, 03:49
quelle

3 Antworten

20

Sie möchten

%Vor%

Damit wird $ stdin in ein Array mit einem Array-Eintrag pro Eingabezeile eingefügt.

Beachten Sie, dass dies bei großen Eingabedateien spektakulär ineffizient (speicherorientiert) ist, so dass Sie viel besser mit etwas wie:

umgehen können %Vor%

statt

%Vor%

Weil ersteres keinen Speicher für alles im Voraus reserviert. Versuchen Sie, eine Protokolldatei mit mehreren Gigabyte auf die zweite Weise zu verarbeiten, um zu sehen, wie gut die Swap-Leistung Ihres Systems ist ... & lt; grin & gt;

    
womble 14.02.2009, 04:55
quelle
1

Was Sie suchen, ist mit $stdin anstelle von $ stdin.to_s

%Vor%     
manveru 14.02.2009 03:53
quelle
1

STDIN.lines ist faul, gibt Ihnen jedoch eine arrayähnliche Struktur, um herumzugehen und zu iterieren.

    
rampion 14.02.2009 09:13
quelle

Tags und Links