ご覧いただきありがとうございます。
Windows環境下でvs codeを用いてコードを書き、linuxサーバ上でプログラムを実行しています。
改行とスペースを一括削除したいため、strip!を用いているのですが、
’tap’ : undefined method ‘strip!’ for nil:NilClass(NoMethodError)
と出てしまいました。
windowsのコマンドプロンプト上では問題なく実行できます。
改行コードが違うことが原因なのかと思い、linuxの改行コードのLFに変更しましたがうまくいきませんでした。
何かお分かりになる方がいましたら教えていただけますと幸いです。
以下ソースコードになります。実現したいことは、生物のDNAの塩基配列情報から4連続の文字列がどれだけ含まれているかという頻度データをcsvファイルに出力することです。
Ruby
1コード 2### File-name: split_sequence_4serial_inference2.rb ### 3 4require 'csv' 5 6j = 0 7sum = 12 / 2 8not_print = [] 9count = 0 10label_count = 0 11string_count = 0 12 13File.open('output.data', 'w'){|out_file_name| 14 15 text = File.read('test2.csv') 16 17 text_1 = text.gsub(">", "") 18 text_1 = text_1.gsub(" ", "") 19 text_1 = text_1.gsub(/@.{36}/, "") 20 21 out_file_name.print(text_1) 22} 23 24File.open('output.data'){|file| 25 26 file.each_line{|line| 27 28 if (count%2==0)#((2<line.length)&&(line.length<20)) then 29 print count 30 print "\n" 31 label[label_count] = line 32 #label[label_count].chomp! 33 count += 1 34 label_count += 1 35 string_count += (line.length) 36 #print string_count 37 #print "\n" 38 elsif (count%2==1)#(line.length>20) 39 split_length = line.length 40 #print split_length 41 t_t_t_t = 0 42 t_t_t_c = 0 43 t_t_t_a = 0 44 ... #10000文字までしかコードを載せられないため省略 45 g_g_g_t = 0 46 g_g_g_c = 0 47 g_g_g_a = 0 48 g_g_g_g = 0 49 others = 0 50 i = 0 51 52 while i < split_length do 53 file.seek(string_count+i, IO::SEEK_SET) 54 dna_w = file.read(1) 55 #print dna_w 56 file.seek(string_count+i+1, IO::SEEK_SET) 57 dna_w2 = file.read(1) 58 #print dna_w2 59 file.seek(string_count+i+2, IO::SEEK_SET) 60 dna_w3 = file.read(1) 61 #print dna_w3 62 file.seek(string_count+i+3, IO::SEEK_SET) 63 dna_w4 = file.read(1) 64 #print dna_w4 65 #print j 66 case dna_w 67 68 #4連続塩基の頻度を算出する 69 when 'T' 70 71 if(dna_w2 == 'T') then 72 if(dna_w3 == 'T') then 73 if(dna_w4 == 'T') then 74 t_t_t_t += 1 75 elsif(dna_w4 == 'C') then 76 t_t_t_c += 1 77 elsif(dna_w4 == 'A') then 78 t_t_t_a += 1 79 elsif(dna_w4 == 'G') then 80 t_t_t_g += 1 81 end 82 elsif(dna_w3 == 'C') then 83 if(dna_w4 == 'T') then 84 t_t_c_t += 1 85 elsif(dna_w4 == 'C') then 86 t_t_c_c += 1 87 elsif(dna_w4 == 'A') then 88 t_t_c_a += 1 89 elsif(dna_w4 == 'G') then 90 t_t_c_g += 1 91 end 92 elsif(dna_w3 == 'A') then 93 if(dna_w4 == 'T') then 94 t_t_a_t += 1 95 elsif(dna_w4 == 'C') then 96 t_t_a_c += 1 97 elsif(dna_w4 == 'A') then 98 t_t_a_a += 1 99 elsif(dna_w4 == 'G') then 100 t_t_a_g += 1 101 end 102 elsif(dna_w3 == 'G') then 103 if(dna_w4 == 'T') then 104 t_t_g_t += 1 105 elsif(dna_w4 == 'C') then 106 t_t_g_c += 1 107 elsif(dna_w4 == 'A') then 108 t_t_g_a += 1 109 elsif(dna_w4 == 'G') then 110 t_t_g_g += 1 111 end 112 end 113 elsif(dna_w2 == 'C') then 114 if(dna_w3 == 'T') then 115 if(dna_w4 == 'T') then 116 t_c_t_t += 1 117 elsif(dna_w4 == 'C') then 118 t_c_t_c += 1 119 elsif(dna_w4 == 'A') then 120 t_c_t_a += 1 121 elsif(dna_w4 == 'G') then 122 t_c_t_g += 1 123 end 124 elsif(dna_w3 == 'C') then 125 if(dna_w4 == 'T') then 126 t_c_c_t += 1 127 elsif(dna_w4 == 'C') then 128 t_c_c_c += 1 129 elsif(dna_w4 == 'A') then 130 t_c_c_a += 1 131 elsif(dna_w4 == 'G') then 132 t_c_c_g += 1 133 end 134 elsif(dna_w3 == 'A') then 135 if(dna_w4 == 'T') then 136 t_c_a_t += 1 137 elsif(dna_w4 == 'C') then 138 t_c_a_c += 1 139 elsif(dna_w4 == 'A') then 140 t_c_a_a += 1 141 elsif(dna_w4 == 'G') then 142 t_c_a_g += 1 143 end 144 elsif(dna_w3 == 'G') then 145 if(dna_w4 == 'T') then 146 t_c_g_t += 1 147 elsif(dna_w4 == 'C') then 148 t_c_g_c += 1 149 elsif(dna_w4 == 'A') then 150 t_c_g_a += 1 151 elsif(dna_w4 == 'G') then 152 t_c_g_g += 1 153 end 154 end 155 ... #10000文字までしかコードを載せられないため省略 156 end 157 end 158 end 159 160 when 'C' #10000文字までしかコードが載せられないため省略 161 when 'A' 162 when 'G' 163 else 164 others += 1 165 end 166 i += 1 167 end 168 169 string_count += (line.length) 170 if((others == 0) || (others < (split_length * 5))) then 171 tttt[j] = t_t_t_t 172 tttc[j] = t_t_t_c 173 ttta[j] = t_t_t_a 174 ... #10000文字までしかコードを載せられないため省略 175 gggt[j] = g_g_g_t 176 gggc[j] = g_g_g_c 177 ggga[j] = g_g_g_a 178 gggg[j] = g_g_g_g 179 180 #print string_count 181 #print "\n" 182 #print count 183 count += 1 184 j += 1 185 186 else 187 #print j 188 #print "\n" 189 not_print[j] = 2 190 j += 1 191 end 192 end 193 } 194} 195 196 197 #csvファイルへの出力 198file = File.open('output.csv', 'w') 199 200 c = "," 201 k = "\n" 202 203 file.print 'label' 204 file.print c 205 file.print 'tttt' 206 file.print c 207 file.print 'tttc' 208 file.print c 209 file.print 'ttta' 210 file.print c 211 ... #10000文字までしかコードを載せられないため省略 212 file.print 'gggt' 213 file.print c 214 file.print 'gggc' 215 file.print c 216 file.print 'ggga' 217 file.print c 218 file.print 'gggg' 219 file.print k 220 221 j = 0 222 while j < sum do 223 label[j].tap(&:strip!) #eroor箇所 224 file.print label[j] 225 file.print c 226 file.print tttt[j] 227 file.print c 228 file.print tttc[j] 229 file.print c 230 file.print ttta[j] 231 file.print c 232 ... #10000文字までしかコードを載せられないため省略 233 file.print ggga[j] 234 file.print c 235 file.print gggg[j] 236 file.print k 237 238 j = j + 1 239 end
回答1件
あなたの回答
tips
プレビュー