文字列をCSVに整形し、それを数値でソートする、というものなのですが、ファイルを別々に実行するのが面倒なので一つのファイルで二つ目のファイルをrequireでまとめて実行しようとしたところ、後述のようなエラーがでてしまいます。どうしたらよいでしょうか?
ファイル構成
.
├── csv_sort.rb
├── output.csv
└── uni_replace.rb
C:\pg\uni_sort\csv_sort.rb
Encoding.default_external = 'UTF-8' class Address # http://somethingpg.hatenablog.com/entry/20111218/1324176083 def initialize buf = Array.new #バッファするための配列を宣言 open('C:/pg/uni_sort/output.csv',"r") do |file| file.each_line do |s| buf << s.chomp #改行文字\nを取り除きつつbufに値を格納 @s = buf #できあがった配列をインスタンス変数に格納 end end end def sort #降順に並べ替える @s.sort! do |one,another| one = one.split(',') another = another.split(',') one[2] <=> another[2] end end end address = Address.new puts address.sort File.open('C:\pg\uni_sort\uni_replace.rb','a').puts address.sort
C:\pg\uni_sort\uni_replace.rb
Encoding.default_external = 'UTF-8' @source=' 紅華刑 HIGH SCORE:1,006,988 Tidal Wave HIGH SCORE:1,004,862 BOKUTO HIGH SCORE:1,008,541 We Gonna Party -Feline Groove Mix- HIGH SCORE:1,002,045 おまかせ!!トラブルメイ娘☆とれびちゃん HIGH SCORE:1,006,875 ' @source.gsub!(/(.*?)\n(.*?)\n\n/,"\1,\2\n") @source.gsub!(/HIGH SCORE:/,"") @source.gsub!(/^\n*(.*?)/,"\1") puts @source File.open('C:\pg\uni_sort\output.csv','w').puts @source require 'C:\pg\uni_sort\csv_sort.rb' __END__
C:\pg\uni_sort\uni_replace.rbの期待する出力
We Gonna Party -Feline Groove Mix-,1,002,045 Tidal Wave,1,004,862 おまかせ!!トラブルメイ娘☆とれびちゃん,1,006,875 紅華刑,1,006,988 BOKUTO,1,008,541
C:\pg\uni_sort\uni_replace.rbの実行結果
C:/pg/uni_sort/csv_sort.rb:17:in `sort': undefined method `sort!' for nil:NilClass (NoMethodError) from C:/pg/uni_sort/csv_sort.rb:26:in `<top (required)>' from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' from C:/Ruby24-x64/lib/ruby/2.4.0/rubygems/core_ext/kernel_require.rb:55:in `require' from C:/pg/uni_sort/uni_replace.rb:32:in `<main>'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/02/25 09:39
2018/02/25 09:49