2014-02-09 138 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文件上运行。 –