teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

コードを完成

2020/05/03 10:33

投稿

otakurounin
otakurounin

スコア25

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
+ というエラーメッセージが出て、何が原因かなかなかわからなかったのですが、ここの改行を取ったらちゃんと動くようになりました。