2011-07-16 184 views
-3

我正在Ruby中執行腳本來閱讀一些包文件並查看它們包含的內容。 我昨天寫這個非常簡單的腳本,讓我頭疼:字符串問題

arch = File.new(*file_name*, "r") 
z = arch.sysread(1).unpack('H*') 
puts z 
content = arch.sysread(32) 

變量z上面有10的值。如果我進入sysread這我得到一個錯誤,但如果我定義一個變量x和分配一個值爲10並通過它,它運行OK。

爲什麼我不能通過zsysread

+0

使用'p z'而不是'把z'大概'z'是不是真的'10'。另外,你應該說你得到了什麼錯誤。 –

回答

1

以二進制形式讀取文件,用"rb"而不是"r",並且您說它給出錯誤,哪個錯誤?

無論如何,unpack函數返回Array,在這種情況下,將十六進制數字作爲字符串。你可能想這樣做:content = arch.read(z.first.to_i(16))

此代碼更有意義(如果你正在嘗試做什麼,我認爲):

arch = File.open("filename", "rb") # open the file as binary 
z = arch.read(1).bytes.first  # get the first byte as a integer 
content = arch.read(z)    # read the next z bytes 
+0

我想從文件中提取一些文本。在文件中放置了長文字,我需要這個數字。 – Sergio

+1

@Sergio,在你的問題中提供一個你想要的文件和輸入樣本。文件是二進制文件嗎?有更多的內容或只是你想要的文字? (你可以,也許讀取整個文件)或者你想讀取一個二進制文件的一部分,如果它的大小是前綴的話?這個尺寸如何保存?提供更多信息! –

+0

我需要讀取十六進制文件,因爲我需要這種格式的值。文件擴展名是* .dat,沒有文字。我把一個頭文件的樣本。 MTAF0 < - <「š〜'Ñ'<žÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿHEAD°@ + - + - – Sergio