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

回答編集履歴

1

内容修正

2018/04/19 05:02

投稿

kazto
kazto

スコア7196

answer CHANGED
@@ -1,21 +1,22 @@
1
1
  splitせずに比較でいかがでしょうか。
2
2
 
3
+ 追記:
4
+ 入力をタブ区切りに、出力をCSV形式にしました。
3
5
  ```Ruby
4
- irb(main):001:0> data = File.open("sample.csv").readlines.map{|v| v.chomp.split(",")}
6
+ data = File.open("sample.bl6").readlines.map{|v| v.chomp.split("\t")}
5
- => [["1|abc2|1", "1", "2"], ["1|abc2|3", "2", "3"], ["1|abc2|2", "3", "3"], ["1|abc1|1", "4", "4"], ["1|abc1|2", "5", "2"], ["2|abd1|2", "7
6
- , "5"], ["2|abd1|1", "3", "3"], ["3|acd2|1", "4", "2"]]
7
- irb(main):002:0> data.sort{|a, b| a[0] <=> b[0]}
7
+ data.sort!{|a, b| a[0] <=> b[0]}
8
- => [["1|abc1|1", "4", "4"], ["1|abc1|2", "5", "2"], ["1|abc2|1", "1", "2"], ["1|abc2|2", "3", "3"], ["1|abc2|3", "2", "3"], ["2|abd1|1", "3
8
+
9
- , "3"], ["2|abd1|2", "7", "5"], ["3|acd2|1", "4", "2"]]
10
- irb(main):003:0> require 'pp'
11
- => true
9
+ # CSVクラスを使わず
12
- irb(main):004:0> pp data.sort{|a, b| a[0] <=> b[0]}
13
- [["1|abc1|1", "4", "4"],
10
+ File.open("result.csv", "w") do |fh|
11
+ data.each do |line|
12
+ fh.puts line.join(",")
13
+ end
14
+ end
15
+
16
+ # CSVクラス使って。どちらでもお好きな方で。
14
- ["1|abc1|2", "5", "2"],
17
+ CSV.open("result.csv","w") do |fh|
18
+ data.each do |line|
15
- ["1|abc2|1", "1", "2"],
19
+ fh << line
16
- ["1|abc2|2", "3", "3"],
17
- ["1|abc2|3", "2", "3"],
18
- ["2|abd1|1", "3", "3"],
20
+ end
19
- ["2|abd1|2", "7", "5"],
21
+ end
20
- ["3|acd2|1", "4", "2"]]
21
22
  ```