全面剖析Ruby隨機(jī)存取文件
對(duì)于一個(gè)剛剛學(xué)習(xí)編程語(yǔ)言不久的朋友來(lái)說(shuō)對(duì)于Ruby語(yǔ)言可能還是有些陌生的。它是一種新興的解釋型腳本語(yǔ)言。如果你想實(shí)現(xiàn)Ruby隨機(jī)存取文件,你能夠使用seek方法。#t#
它是File從Io繼承而來(lái)的.它的最簡(jiǎn)單的使用就是指定一個(gè)字節(jié)位置.這個(gè)位置是相對(duì)于文件開始的位置(開始的位置是0):
- # myfile contains
only: abcdefghi - file = File.new("myfile")
- file.seek(5)
- str = file.gets# "fghi"
如果你能確定每一行都是固定的長(zhǎng)度,你就能seek指定的行進(jìn)行Ruby隨機(jī)存取文件:
- # Assume 20 bytes per line.
- # Line N starts at byte (N-1)*20
- file = File.new("fixedlines")
- file.seek(5*20)# Sixth line!
- # Elegance is left as an exercise.
如果你想做一個(gè)相對(duì)的搜索,你就要使用第二個(gè)參數(shù),常量 IO::SEEK_CUR表示當(dāng)前的位置,而第一個(gè)參數(shù)則就是相對(duì)于當(dāng)前位置的偏移量(可能是負(fù)數(shù)):
- file = File.new("somefile")
- file.seek(55) # Position is 55
- file.seek(-22, IO::SEEK_CUR)
# Position is 33- file.seek(47, IO::SEEK_CUR)
# Position is 80
你也能從文件的結(jié)束位置開始Ruby隨機(jī)存取文件:
- file.seek(-20, IO::SEEK_END)
# twenty bytes from eof
方法tell得到文件的當(dāng)前位置,pos是它的別名:
- file.seek(20)
- pos1 = file.tell # 20
- file.seek(50, IO::SEEK_CUR)
- pos2 = file.pos # 70
rewind方法將會(huì)將文件指針的位置設(shè)回到開始的位置,也就是0.
以上就是Ruby隨機(jī)存取文件的各種方法介紹,希望對(duì)大家有所幫助。