第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

Ruby 的 I/O

我們與計算機的各種交互叫做 I/O,比如我們使用鍵盤輸入文字、按下鼠標,計算機給在屏幕中顯示我們打出文字,生成文件等。交互的數(shù)據(jù)以字符/字節(jié)流的形式發(fā)送到程序或從程序發(fā)送。本章節(jié)中我們?yōu)榇蠹以敿氈v解在 Ruby 中的 I/O 對象。

1. I/O 對象

在 Ruby 中,I/O 對象包裝輸入/輸出流。常量STDINSTDOUTSTDERR指向包裝標準流的I/O對象。默認情況下,全局變量$stdin,$stdout$stderr指向它們各自的常量。盡管常量應始終指向默認流,但是可以覆蓋全局變量以指向另一個 I/O 流(例如文件)。

1.1 輸出

使用下面的方法可以將內(nèi)容輸出到屏幕上:

1.1.1 puts

IO 對象可以通過 puts 進行寫入操作。

實例:

$stdout.puts 'Hello World'

#---- 輸出結果 ----
Hello World

另一種寫法是我們常用的簡易版本:

puts 'Hello World'

#---- 輸出結果 ----
Hello World

1.2 print

使用 print 也可以進行寫入操作。

print 'Hello World'

#---- 輸出結果 ----
Hello World

需要注意一點,putsprint 的區(qū)別是 puts 在結尾有一個換行符,而 print 沒有。

實例:

puts 'Hello '
puts 'World'

#---- 輸出結果 ----
Hello
World
print 'Hello '
print 'World'

#---- 輸出結果 ----
Hello World

1.3 p

p 相當于將puts打印的內(nèi)容進行了to_s操作。

實例:

puts [1, 2, 3].to_s
p [1, 2, 3]

#---- 輸出結果 ----
[1, 2, 3]
[1, 2, 3]

1.2 輸入

我們使用 $stdin.gets 來讓用戶進行輸入操作。

實例:

a = $stdin.gets 
p a
             # 鍵盤輸入1

#---- 輸出結果 ----
1
"1\n"

當然我們也可以省略 $stdin,只使用 gets

2. 文件操作

2.1 創(chuàng)建一個I/O對象

要創(chuàng)建一個新的 IO 對象,我們需要一個文件描述符。這里我們使用數(shù)值 1(stdout)。

io = IO.new(1)
io.puts 'hello world'

#---- 輸出結果 ----
hello world

2.1 讀取文件

I/O 對象是 File 的父類,所以可以對文件進行讀寫操作

讓我們創(chuàng)建一個文件 123.txt,寫入三行文字。

sentence1
sentence2
sentence3

然后使用 pwd 查找到它的絕對地址目錄后。使用 IO.sysopen 并按照下面的代碼進行讀取操作。

a = IO.sysopen '/Users/Andrew/Desktop/123.txt'
p a
lorem = IO.new(a)
p lorem.gets

#---- 輸出結果 ----
7
"sentence1\n"

由此我們讀取了一行的數(shù)據(jù),如果我們想繼續(xù)讀取,就要繼續(xù)使用 gets

a = IO.sysopen '/Users/Andrew/Desktop/123.txt'
p a
lorem = IO.new(a)
p lorem.gets
p lorem.gets
p lorem.gets
p lorem.gets

#---- 輸出結果 ----
7
"sentence1\n"
"sentence2\n"
"sentence3\n"
nil

當我們讀到第四行的時候沒有數(shù)據(jù)了,會返回 nil。

我們可以通過 eof? 判斷是否到達文件末尾,使用 pos 來獲取光標位置,使用 rewind 將光標重置到頂部。

a = IO.sysopen '/Users/Andrew/Desktop/123.txt'
p a
lorem = IO.new(a)
p lorem.gets
p lorem.gets
p lorem.gets
p lorem.gets
p lorem.pos
p lorem.eof?
p lorem.rewind
p lorem.pos
p lorem.eof?

#---- 輸出結果 ----
7
"sentence1\n"
"sentence2\n"
"sentence3\n"
nil
30
true
0
0
false

2.2 寫入文件

繼續(xù)上面文件的操作,使用 puts 可以繼續(xù)寫入文件。

a = IO.sysopen '/Users/Andrew/Desktop/123.txt', 'a'
p a
lorem = IO.new(a)
p lorem.puts "sentence4"
p lorem.puts "sentence5"

#---- 輸出結果 ----
7
nil
nil

執(zhí)行后我們查看 123.txt 文件,發(fā)現(xiàn)文件內(nèi)容變更為:

sentence1
sentence2
sentence3
sentence4
sentence5

3. 小結

本章節(jié)中我們學習了 I/O 對象的輸出(puts、print、p)和輸入(gets),學習了如何創(chuàng)建一個 IO 對象來讀取文件和寫入文件。