0

次のコードがあります。

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

}

入力ファイル:

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、文字列をフロートと比較したいというエラーが表示されます。わかった。(keys[length-2]).to_f を実行して、String を Float に変換します。変換すると、数値が破壊されます: 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) よろしくお願いします

4

3 に答える 3

1

そこにあるすべての null バイトから判断すると、得られたのは、utf8 または ascii として解釈している utf16 テキストです。Ruby 1.9 を使用していると仮定すると、次のようにして Ruby にエンコーディングを実行させることができます。

File.open("lala.txt","rb:UTF-16:US-ASCII")

これにより、テキストがデフォルトの内部エンコーディングに変換されます。

于 2013-05-23T19:20:46.727 に答える
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
}
于 2013-05-23T19:06:39.490 に答える