質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

3回答

900閲覧

Rubyのseekメソッドについて

tkrd

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2021/01/21 09:27

編集2021/01/21 09:43

Rubyのseekメソッドについて、ファイルを一行ずつ読み込んでいる際にseekメソッドが使えないということはありますでしょうか。初歩的な質問で申し訳ありませんがよろしくお願いいたします。

Ruby

1該当箇所のコード 2File.open('output.data'){|file| 3 4label_count = 0 5 string_count = 0 6 7 string_2 = file.each_line{|line| 8 9 i = 0 10 while i < split_length do 11 string_2.seek(string_count+i) 12 dna_w = string_2.read(1) 13 14 string_2.seek(string_count+i+1) 15 dna_w2 = string_2.read(1) 16 17 string_2.seek(string_count+i+2) 18 dna_w3 = string_2.read(1) 19 20 string_2.seek(string_count+i+3) 21 dna_w4 = string_2.read(1) 22 case dna_w 23 24 #4連続塩基の頻度を算出する 25 when 'T' 26 27 if(dna_w2 == 'T') then 28 if(dna_w3 == 'T') then 29 if(dna_w4 == 'T') then 30 t_t_t_t += 1 31 elsif(dna_w4 == 'C') then 32 t_t_t_c += 1 33 elsif(dna_w4 == 'A') then 34 t_t_t_a += 1 35 elsif(dna_w4 == 'G') then 36 t_t_t_g += 1 37 end 38 elsif(dna_w3 == 'C') then 39 if(dna_w4 == 'T') then 40 t_t_c_t += 1 41 elsif(dna_w4 == 'C') then 42 t_t_c_c += 1 43 elsif(dna_w4 == 'A') then 44 t_t_c_a += 1 45 elsif(dna_w4 == 'G') then 46 t_t_c_g += 1 47 end 48 elsif(dna_w3 == 'A') then 49 if(dna_w4 == 'T') then 50 t_t_a_t += 1 51 elsif(dna_w4 == 'C') then 52 t_t_a_c += 1 53 elsif(dna_w4 == 'A') then 54 t_t_a_a += 1 55 elsif(dna_w4 == 'G') then 56 t_t_a_g += 1 57 end 58 elsif(dna_w3 == 'G') then 59 if(dna_w4 == 'T') then 60 t_t_g_t += 1 61 elsif(dna_w4 == 'C') then 62 t_t_g_c += 1 63 elsif(dna_w4 == 'A') then 64 t_t_g_a += 1 65 elsif(dna_w4 == 'G') then 66 t_t_g_g += 1 67 end 68 end 69 elsif(dna_w2 == 'C') then 70 if(dna_w3 == 'T') then 71 if(dna_w4 == 'T') then 72 t_c_t_t += 1 73 elsif(dna_w4 == 'C') then 74 t_c_t_c += 1 75 elsif(dna_w4 == 'A') then 76 t_c_t_a += 1 77 elsif(dna_w4 == 'G') then 78 t_c_t_g += 1 79 end 80 elsif(dna_w3 == 'C') then 81 if(dna_w4 == 'T') then 82 t_c_c_t += 1 83 elsif(dna_w4 == 'C') then 84 t_c_c_c += 1 85 elsif(dna_w4 == 'A') then 86 t_c_c_a += 1 87 elsif(dna_w4 == 'G') then 88 t_c_c_g += 1 89 end 90 elsif(dna_w3 == 'A') then 91 if(dna_w4 == 'T') then 92 t_c_a_t += 1 93 elsif(dna_w4 == 'C') then 94 t_c_a_c += 1 95 elsif(dna_w4 == 'A') then 96 t_c_a_a += 1 97 elsif(dna_w4 == 'G') then 98 t_c_a_g += 1 99 end 100 elsif(dna_w3 == 'G') then 101 if(dna_w4 == 'T') then 102 t_c_g_t += 1 103 elsif(dna_w4 == 'C') then 104 t_c_g_c += 1 105 elsif(dna_w4 == 'A') then 106 t_c_g_a += 1 107 elsif(dna_w4 == 'G') then 108 t_c_g_g += 1 109 end 110 end 111 elsif(dna_w2 == 'A') then 112 if(dna_w3 == 'T') then 113 if(dna_w4 == 'T') then 114 t_a_t_t += 1 115 elsif(dna_w4 == 'C') then 116 t_a_t_c += 1 117 elsif(dna_w4 == 'A') then 118 t_a_t_a += 1 119 elsif(dna_w4 == 'G') then 120 t_a_t_g += 1 121 end 122 elsif(dna_w3 == 'C') then 123 if(dna_w4 == 'T') then 124 t_a_c_t += 1 125 elsif(dna_w4 == 'C') then 126 t_a_c_c += 1 127 elsif(dna_w4 == 'A') then 128 t_a_c_a += 1 129 elsif(dna_w4 == 'G') then 130 t_a_c_g += 1 131 end 132 elsif(dna_w3 == 'A') then 133 if(dna_w4 == 'T') then 134 t_a_a_t += 1 135 elsif(dna_w4 == 'C') then 136 t_a_a_c += 1 137 elsif(dna_w4 == 'A') then 138 t_a_a_a += 1 139 elsif(dna_w4 == 'G') then 140 t_a_a_g += 1 141 end 142 elsif(dna_w3 == 'G') then 143 if(dna_w4 == 'T') then 144 t_a_g_t += 1 145 elsif(dna_w4 == 'C') then 146 t_a_g_c += 1 147 elsif(dna_w4 == 'A') then 148 t_a_g_a += 1 149 elsif(dna_w4 == 'G') then 150 t_a_g_g += 1 151 end 152 end 153 elsif(dna_w2 == 'G') then 154 if(dna_w3 == 'T') then 155 if(dna_w4 == 'T') then 156 t_g_t_t += 1 157 elsif(dna_w4 == 'C') then 158 t_g_t_c += 1 159 elsif(dna_w4 == 'A') then 160 t_g_t_a += 1 161 elsif(dna_w4 == 'G') then 162 t_g_t_g += 1 163 end 164 elsif(dna_w3 == 'C') then 165 if(dna_w4 == 'T') then 166 t_g_c_t += 1 167 elsif(dna_w4 == 'C') then 168 t_g_c_c += 1 169 elsif(dna_w4 == 'A') then 170 t_g_c_a += 1 171 elsif(dna_w4 == 'G') then 172 t_g_c_g += 1 173 end 174 elsif(dna_w3 == 'A') then 175 if(dna_w4 == 'T') then 176 t_g_a_t += 1 177 elsif(dna_w4 == 'C') then 178 t_g_a_c += 1 179 elsif(dna_w4 == 'A') then 180 t_g_a_a += 1 181 elsif(dna_w4 == 'G') then 182 t_g_a_g += 1 183 end 184 elsif(dna_w3 == 'G') then 185 if(dna_w4 == 'T') then 186 t_g_g_t += 1 187 elsif(dna_w4 == 'C') then 188 t_g_g_c += 1 189 elsif(dna_w4 == 'A') then 190 t_g_g_a += 1 191 elsif(dna_w4 == 'G') then 192 t_g_g_g += 1 193 end 194 end 195 end 196 when 'C' #Tのときと同じ動作のため省略 197 when 'A' 198 when 'G' 199 else 200 end 201 i += 1 202 end 203 204 string_count += line.length 205 end 206 } 207} 208 209
エラー文 undefined method `seek' for nil:NilClass (NoMethodError)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/01/21 09:31

コードが途切れているようです。
tkrd

2021/01/21 09:43

ありがとうございます。修正いたしました。
tatsu99

2021/01/21 23:40

ファイルを1行ずつ読み込んで処理するとき、 業務的になにをなさりたいのか、何故seekが必要と考えたのか、 その辺の事情を具体的に提示していただければ、良い回答が得られるかも知れません。 又、読み込むファイルのサンプルも提示されると、更に良いでしょう。
tkrd

2021/01/22 03:06

file.seek()を用いたところ解決いたしました。今後質問する際にはそのようにさせていただきます。ありがとうございました。
guest

回答3

0

ベストアンサー

なぜstring_2に対してseekを行っているのでしょうか?

このstring_2each_lineのブロックの実行結果が代入されるものなので、最終結果の得られていないブロックの実行中は、エラーメッセージの通りnilが入っています。

投稿2021/01/21 09:50

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkrd

2021/01/21 10:03

each_lineのブロックの結果が先に代入されるものだと勘違いしていました。ありがとうございます。 前にeach_lineを使わずにファイル全体の文字列を読み込んだ際には動いたため、同様にできると思ってしまったのですが、今回ファイルの都合上1行ずつ読み込まなければならないため、解決法など分かれば教えていただけませんでしょうか。
maisumakun

2021/01/21 10:07

otnさんの回答にあるように、file.seekであれば呼び出せます(ただし、元のコードが何をするかわからないので、それが正しいとは判断できません)。
guest

0

file.seek()を使って解決できました。ありがとうございました。

投稿2021/01/22 03:08

tkrd

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

seekはファイル(IOオブジェクト)に対して行います。

file.seek( )ですね。

何をやっているか分からないコードで、中身は読んでないので、そこだけ修正すれば良いかどうかは不明。

投稿2021/01/21 09:55

otn

総合スコア85901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問