我有以下代码:
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,它会显示一个错误,我想要比较一个字符串和一个浮点数。好的。让我们将字符串转换为浮点型,然后执行以下操作:(Keyslength 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)提前谢谢
发布于 2013-05-24 03:20:47
从其中所有的空字节判断,您得到的是您解释为utf8或ascii的utf16文本。假设您使用的是ruby1.9,您可以通过执行以下操作来让ruby进行编码
File.open("lala.txt","rb:UTF-16:US-ASCII")它会将文本转换为默认的内部编码。
发布于 2013-05-24 03:06:39
我认为你有一些奇怪的空格问题。我认为如果你在/\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
}发布于 2013-05-24 03:51:28
您的代码可以编写得更像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因为最后一列中的值都不是> 0.98,所以genes为空。
https://stackoverflow.com/questions/16721494
复制相似问题