我有以下代码:
input=File.open("lala.txt","r")
genes=[]
input.each_line{|li|
keys=li.split("\t")
length=keys.length
puts(keys[length-2])
puts(keys[length-2].to_f)
if (keys[0]["-"].class==NilClass && keys[1]["-"].class==NilClass && (keys[length-2]).to_f>0.98)
genes.push(keys[0])
genes.push(keys[1])
end
}
inputfile中:
1053_at/RFC2 203696_s_at/RFC2 0.9031699692435061
117_at/HSPA6 1553158_at/C3orf34 0.9079515773059148
117_at/HSPA6 1553513_at/VNN3 0.9237382047518812
117_at/HSPA6 1553723_at/GPR97 0.9367168572635286
117_at/HSPA6 1557852_at/--- 0.9177916032275163
117_at/HSPA6 1558525_at/--- 0.9229865774037962
117_at/HSPA6 1562481_at/--- 0.9109034368848434
117_at/HSPA6 1569385_s_at/TET2 0.9187904542249753
117_at/HSPA6 1569830_at/PTPRC 0.900051189462974
117_at/HSPA6 1569955_at/--- 0.9028606652628463
117_at/HSPA6 201393_s_at/IGF2R 0.9090699277161238
我的问题如下:
我想将每行中的数字与> 0.98进行比较。
如果我只写keys[length-2]>0.98
,它会向我显示一个错误,我想将一个字符串与一个浮点数进行比较。好。让我们将String转换为Float,然后执行以下操作:(keys [length-2])。to_f。在转换它但它破坏了数字:我得到0.0
输出:
0.9031699692435061
0.0
0.9079515773059148
0.0
0.9237382047518812
0.0
0.9367168572635286
0.0
0.9177916032275163
0.0
0.9229865774037962
0.0
0.9109034368848434
0.0
0.9187904542249753
0.0
0.900051189462974
0.0
0.9028606652628463
0.0
0.9090699277161238
0.0
0.9002336615360215
0.0
那有什么问题?(Ruby:linux 1.9.3) 提前致谢
答案 0 :(得分:1)
通过那里的所有空字节来判断,你得到的是你正在解释为utf8或ascii的utf16文本。假设你使用ruby 1.9,你可以通过执行
来获得ruby来进行编码File.open("lala.txt","rb:UTF-16:US-ASCII")
将文本转换为默认的内部编码。
答案 1 :(得分:0)
我认为你有一些奇怪的空白问题。我想如果你分开/\s+/
而只是使用keys.last
,你应该是好的:
input=File.open("lala.txt","r")
genes=[]
input.each_line{|li|
keys=li.split(/\s+/)
puts(keys.last)
puts(keys.last.to_f)
if (keys[0]["-"].class==NilClass && keys[1]["-"].class==NilClass && (keys.last).to_f>0.98)
genes.push(keys[0])
genes.push(keys[1])
end
}
答案 2 :(得分:0)
您的代码可以编写得更像Ruby,并且可以利用经过良好测试的轮子:
require 'csv'
genes = []
CSV.foreach("lala.txt", :col_sep => "\t") do |row|
puts row[-1]
puts row[-1].to_f
if (!row[0]["-"] && !row[1]["-"] && (row[-1].to_f > 0.98))
genes << row[0]
genes << row[1]
end
end
puts genes
这是输出:
0.9031699692435061
0.9031699692435061
0.9079515773059148
0.9079515773059148
0.9237382047518812
0.9237382047518812
0.9367168572635286
0.9367168572635286
0.9177916032275163
0.9177916032275163
0.9229865774037962
0.9229865774037962
0.9109034368848434
0.9109034368848434
0.9187904542249753
0.9187904542249753
0.900051189462974
0.900051189462974
0.9028606652628463
0.9028606652628463
0.9090699277161238
0.9090699277161238
并且genes
为空,因为最后一列中的值不是> 0.98
。