2014-02-09 178 views
1

我是紅寶石新手,我無法解決問題。我有一個大的流文件File.dat,而我所知道的是它的結構。紅寶石.dat文件拆分

它始於

數字 - 3個字符

數字 - 10個字符

數字 - 2個字符

數字 - 12個字符

字母數字 - 30個字符

我需要t把它(這個開始描述)切成5個變量,以便能夠使用它。到目前爲止,我只能夠有一個txt文件做到這一點,但它不會對.dat文件

file = File.open("file.txt", 'r') 
while !file.eof?  
    line = file.readline  
end  
    var1 = line[0..2]  
    var2 = line[3..12]  
    var3 = line[13..14]  
    var4 = line[15..26]  
    var5 = line[27..56]  
puts var1 
+0

是什麼txt文件和DAT文件之間有什麼區別?它只是內容還是你的dat文件還有別的像命名管道?你的程序的輸出是什麼?預期的產出? –

+0

歡迎來到SO。它是一個二進制文件嗎?如果不是,你知道它的字符編碼是什麼?如果您對字段的固定長度有信心,您可以一次嘗試讀取幾個字節。查看[IO#read](http://ruby-doc.org/core-2.0/IO.html#method-i-read)和[IO.binread](http://ruby-doc.org/core -2.0/IO.html#method-c-binread) –

+0

該文件是一個二進制流文件,(希望我理解正確)一個命名管道。關於程序的輸出,沒有,我只需要將它切成變量或數組。我添加了文本文件的代碼,以顯示我需要的基本(txt)文件 –

回答

0

在你的榜樣,你正在使用.txt擴展工作,但你應該使用的.dat。 試試這個:

line = File.open('file.dat', File::RDONLY){|f| f.read }

+0

,正如我剛纔所說的那樣,我只能用txt文件完成此操作,但它無法在.dat文件上運行。 –