。我面對這樣的代碼:處理的紅寶石學習書本文件問題
f = File.new("a.txt", "r")
while a = f.getc
puts a.chr
f.seek(5, IO::SEEK_CUR)
end
作者寫道,該代碼產生的每個第五個字符的文件,但我不明白爲什麼?請逐行解釋我。 謝謝。
。我面對這樣的代碼:處理的紅寶石學習書本文件問題
f = File.new("a.txt", "r")
while a = f.getc
puts a.chr
f.seek(5, IO::SEEK_CUR)
end
作者寫道,該代碼產生的每個第五個字符的文件,但我不明白爲什麼?請逐行解釋我。 謝謝。
f = File.new("a.txt", "r")
這行打開在讀模式下的文件,並保持文件對象(作爲一個I/O(輸入/輸出)流)在變量f。 (參見File#new)
while a = f.getc
getc
是類IO的方法,其在一個時間獲取I/O流中的一個字符,它會給nil
,當滿足I/O流的末尾。所以while a = f.getc
將循環直到文件結束。 (見IO#getc)
puts a.chr
f.getc
會給字符的ASCII值和序來從ASCII值的字符,我們應用a.chr
(見Integer#chr)。我認爲在Ruby 1.9中,我們會將字符本身作爲getc
的輸出,但對於早期版本,我們將ASCII值作爲輸出。第一個getc
命令讀取第一個字符,並在第一個字符後移動I/O流的位置。
f.seek(5, IO::SEEK_CUR)
seek
是I/O數據流的方法,該方法改變了I/O流的通過從所述第二參數中的第一參數的偏移量的位置。 IO::SEEK_CUR
是一個常數,它給出了I/O流的當前位置。所以f.seek(5, IO::SEEK_CUR)
將位置從當前位置移動到5個位置。 (見IO#seek)
這將持續到a = f.getc
成爲虛假的條件(在這裏文件的末尾,f.getc
成爲nil
,這是紅寶石(false
和nil
是在Ruby中唯一falsy值,所有其他人一個falsey值是真值))
使用IRB學習和試驗Ruby。
a = f.getc; puts a.chr
輸出單個字符; f.seek(5, IO::SEEK_CUR)
前進5個字符。
在我看來,'文件中的每五個字符'都是錯誤的。使用f.getc可以讀取一個字符,然後跳過5個字符。然後你讀下一個...所以你得到每個第六個字符。 – knut