質問編集履歴

1

コードを完成

2020/05/03 10:33

投稿

otakurounin
otakurounin

スコア25

test CHANGED
File without changes
test CHANGED
@@ -101,3 +101,107 @@
101
101
  そのメソッドを使っての実行段階で、「メソッドが定義されていない」というエラーが出ます。
102
102
 
103
103
  swapメソッドはネットで公開されていたものを丸写ししています。
104
+
105
+
106
+
107
+ 追記
108
+
109
+ 教えていただいたことを参考に、完成させたのが以下のコードです。
110
+
111
+ ```ruby
112
+
113
+ # 行頭に半角数字4つが並んでいれば、その前に西暦年を追加
114
+
115
+ open("kakeibo_new1.txt", "w") do |f|
116
+
117
+ IO.foreach("kakeibo_ex.rb") do |line|
118
+
119
+ line.gsub!(/^(\d{4})/){'2016'+$1 }
120
+
121
+ f.puts line
122
+
123
+ end
124
+
125
+ end
126
+
127
+ # 各行をタブで分割し、二重配列にする
128
+
129
+ a=[]
130
+
131
+ open("kakeibo_new2.txt", "w") do |f|
132
+
133
+ IO.foreach("kakeibo_new1.txt") do |line|
134
+
135
+ line.chomp!
136
+
137
+ b=line.split(/\t/)
138
+
139
+ a.push(b)
140
+
141
+ end
142
+
143
+ end
144
+
145
+ # 以下のswapメソッドはHayato OKUMOTO @falcon8823さん作成のもの
146
+
147
+ class Array
148
+
149
+ def swap!(a,b)
150
+
151
+ raise ArgumentError unless a.between?(0, self.count-1) && b.between?(0, self.count-1)
152
+
153
+ self[a],self[b]=self[b],self[a]
154
+
155
+ self
156
+
157
+ end
158
+
159
+ def swap(a,b)
160
+
161
+ self.dup.swap!(a,b)
162
+
163
+ end
164
+
165
+ end
166
+
167
+ p a
168
+
169
+
170
+
171
+ a.each do |b|
172
+
173
+ b.swap!(1,4)
174
+
175
+ b.swap!(2,5)
176
+
177
+ b.swap!(3,4)
178
+
179
+ b.swap!(4,5)
180
+
181
+ end
182
+
183
+
184
+
185
+ open("kakeibo_new3.txt", "w") do |f|
186
+
187
+ a.each do |b|
188
+
189
+ f.puts b.join("\t")
190
+
191
+ end
192
+
193
+ end
194
+
195
+ ```
196
+
197
+ katoyさんのようにやったほうが明らかに効率出来ですが、最初に作りかけたものも完成させたかったので。
198
+
199
+ その際に、12行目に
200
+
201
+ line.chomp!
202
+
203
+ も入れました。
204
+
205
+ unexpected /n
206
+
207
+ というエラーメッセージが出て、何が原因かなかなかわからなかったのですが、ここの改行を取ったらちゃんと動くようになりました。