質問編集履歴
1
コードを完成
title
CHANGED
File without changes
|
body
CHANGED
@@ -49,4 +49,56 @@
|
|
49
49
|
2については、まずいったんデータ全体を入れ子配列にし、子配列の要素を入れ替えるという形で列の入れ替えをしようと思いました。
|
50
50
|
そこで、配列の要素の入れ替えについては、ネット上で公開されていた、Arrayクラスにメソッドを追加するという形でやろうとしたのですが、
|
51
51
|
そのメソッドを使っての実行段階で、「メソッドが定義されていない」というエラーが出ます。
|
52
|
-
swapメソッドはネットで公開されていたものを丸写ししています。
|
52
|
+
swapメソッドはネットで公開されていたものを丸写ししています。
|
53
|
+
|
54
|
+
追記
|
55
|
+
教えていただいたことを参考に、完成させたのが以下のコードです。
|
56
|
+
```ruby
|
57
|
+
# 行頭に半角数字4つが並んでいれば、その前に西暦年を追加
|
58
|
+
open("kakeibo_new1.txt", "w") do |f|
|
59
|
+
IO.foreach("kakeibo_ex.rb") do |line|
|
60
|
+
line.gsub!(/^(\d{4})/){'2016'+$1 }
|
61
|
+
f.puts line
|
62
|
+
end
|
63
|
+
end
|
64
|
+
# 各行をタブで分割し、二重配列にする
|
65
|
+
a=[]
|
66
|
+
open("kakeibo_new2.txt", "w") do |f|
|
67
|
+
IO.foreach("kakeibo_new1.txt") do |line|
|
68
|
+
line.chomp!
|
69
|
+
b=line.split(/\t/)
|
70
|
+
a.push(b)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
# 以下のswapメソッドはHayato OKUMOTO @falcon8823さん作成のもの
|
74
|
+
class Array
|
75
|
+
def swap!(a,b)
|
76
|
+
raise ArgumentError unless a.between?(0, self.count-1) && b.between?(0, self.count-1)
|
77
|
+
self[a],self[b]=self[b],self[a]
|
78
|
+
self
|
79
|
+
end
|
80
|
+
def swap(a,b)
|
81
|
+
self.dup.swap!(a,b)
|
82
|
+
end
|
83
|
+
end
|
84
|
+
p a
|
85
|
+
|
86
|
+
a.each do |b|
|
87
|
+
b.swap!(1,4)
|
88
|
+
b.swap!(2,5)
|
89
|
+
b.swap!(3,4)
|
90
|
+
b.swap!(4,5)
|
91
|
+
end
|
92
|
+
|
93
|
+
open("kakeibo_new3.txt", "w") do |f|
|
94
|
+
a.each do |b|
|
95
|
+
f.puts b.join("\t")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
```
|
99
|
+
katoyさんのようにやったほうが明らかに効率出来ですが、最初に作りかけたものも完成させたかったので。
|
100
|
+
その際に、12行目に
|
101
|
+
line.chomp!
|
102
|
+
も入れました。
|
103
|
+
unexpected /n
|
104
|
+
というエラーメッセージが出て、何が原因かなかなかわからなかったのですが、ここの改行を取ったらちゃんと動くようになりました。
|