2013-03-13 11 views
13

Pracuję z obiektem IO (trochę tekstem wyjściowym STDOUT) i próbuję przekonwertować go na ciąg znaków, aby umożliwić przetwarzanie tekstu. Chciałbym zrobić coś takiego:Jak przekonwertować obiekt IO na ciąg w Ruby?

my_io_object = $stdout 
#=> #<IO:<STDOUT>> 

my_io_object.puts('hi') #note: I know how to make 'hi' into a string, but this is a simplified example 
#=>hi 

my_io_object.to_s 

Próbowałem kilka rzeczy i zdobyć kilka błędów:

my_io_object.read 
#=> IOError: not opened for reading 

my_io_object.open 
#=> NoMethodError: private method `open' called for #<IO:<STDOUT>> 

IO.read(my_io_object) 
#=> TypeError: can't convert IO into String 

Czytałem za pomocą metod klasy IO, i nie mogę dowiedzieć się, jak manipulować danymi w tym obiekcie. Jakieś sugestie?

+0

„IOError: nie otwarty do czytania” powinien być właściwy trop. Spróbuj wyszukać tego błędu. –

+0

Nie powiedziałeś wyraźnie, co próbujesz zrobić. Wyjaśnij, co chcesz zrobić, a my prawdopodobnie zapewnimy Ci lepszy sposób dotarcia. Jak otrzymujesz swój tekst STDOUT? –

+0

Dzięki, @tinMan. Przepraszam za brak jasności - to odzwierciedlenie mojego zamieszania. W końcu rozwiązałem to, kierując STDOUT na obiekt StringIO. – MothOnMars

Odpowiedz

21

Rozwiązałem to przez skierowanie moje wyjście do obiektu StringIO zamiast na stdout:

> output = StringIO.new 
#<StringIO:0x007fcb28629030> 
> output.puts('hi') 
nil 
> output.string 
"hi\n" 
-1

STDOUT Przyjmuje ciągi, nie dostarcza ciągów. Możesz do niego pisać, ale nie możesz z niego czytać.

STDOUT.write("hello") # => hello 
STDOUT.read # => IOError: not opened for reading 
+0

Hmm. Więc jest moją jedyną opcją skierowania danych wyjściowych do pliku, a następnie odczytania z pliku, aby uzyskać obiekt ciągu? – MothOnMars

+0

Co próbujesz zrobić? –

+1

To jest bardzo interesujące pytanie, ponieważ STDOUT jest na ogół plikiem, ale specjalnym rodzajem pliku. Oto dokumentacja [tee gem] (http://rubydoc.info/gems/tee/1.0.0/frames). Być może właśnie tak postępujesz. – vgoff

Powiązane problemy