2014-11-08 58 views
0

所以這裏是我需要排序的文件。在ruby中排序統計文件

Jump067 4c3jump1 JUMPMOD067TOP10TIMES 13年10月7日17.363001 259 04/10/12 17.385000 343 04/10/12 17.678001 235 12年5月12日17.685001 265 13年10月7日17.980001 210 21/10/14 18.478001 773 06/06/12 18.523001 208 10/07/13 18.592001 214 27/06/14 18.772001 349 21/10/14 18.978001 630 21/10/14 19.025002 772 10/07/13 19.240002 69 02/05/12 19.356001 219 27/06/14 19.604000 693 24/04/12 19.756001 204 JUMPMOD067ALLTIMES 24/04/12 19.756001 204 6 02/05/12 19.356001 219 1 06/06/12 18.523001 208 1 05/12/12 17.685001 265 6 10/07/13 17.363001 259 8 05/12/12 23.172001 353 7 04/10/12 17.678001 235 2 04/10/12 17.385000 343 1 27/06/14 18.772001 349 6 05/12/12 24.316002 299 2 04/04/13 22.014002 61 2 10/07/13 17.980001 210 2 10/07/13 19.240002 69 6 10/07/13 18.592001 214 7 26/08/13 22.243002 549 4 26/08/13 22.927002 580 4 19/09/13 20.098001 579 3 26/10/13 104.303001 603 1 29/12/13 52.244003 290 1 06/03/14 28.275002 294 1 02/04/14 22.736002 406 3 27/06/14 19.604000 693 3 11/09/14 20.366001 540 2 21/10/14 18.478001 773 8 21/10/14 20.771002 714 4 21/10/14 19.025002 772 4 21/10/14 18.978001 630 2 21/10/14 21.544001 510 1

該文件用於地震MOD的統計。格式如下:

[遊戲版本] [1(始終將1)] [映射名] [JUMPMOD067TOP10TIMES]

TOP10的時間段是在格式[日期] [finish_time] [用戶ID]

[JUMPMOD067ALLTIMES]

的alltimes部分的格式爲[日期] [finish_time] [用戶名] [map_completions]

我需要做的文本文件排序是閱讀所有時間段按[finish_time]的順序,刪除[地圖_completions]數字,然後用所有次數的排序版本替換top10times部分。這必須爲大約2500個文件完成,否則我會手動完成。任何建議或提示將不勝感激。

+0

您是否編寫了任何代碼來執行此操作?如果是這樣,你可以發佈嗎? – Surya 2014-11-08 06:15:48

+0

我剛開始這個過程,並且希望確保我能夠從正確的開始。它需要100%的紅寶石,並且在幾年之內我沒有碰過紅寶石。 – mezzani 2014-11-08 06:18:39

+0

那麼從外觀上看,每行都沒有換行符? – Benji 2014-11-08 06:33:28

回答

1

你可以嘗試類似這樣的方式,在那裏你傳入分數文件名作爲命令行參數並寫入filename.calculated

在* nix,你可以用find . -name '*scores' -exec ruby calculate_high_scores.rb {} \;

file_name = ARGV[0] 
file_content = File.read(file_name) 
file_content.match /([\w\d]+TOP10TIMES).* ([\w\d]+ALLTIMES)/ 

top_10_label = $1.upcase 
all_times_label = $2.upcase 

header, scores = file_content.split(top_10_label) 
top_10, all_times = file_content.split(all_times_label) 

sorted = all_times.split(' ').each_slice(4).to_a.sort do |a,b| 
    b[1].to_f <=> a[1].to_f 
end 

calculate_top_10 = sorted[0..9].map { |score| score[0..2].join(' ') }.join(' ') 

result = "#{header}#{top_10_label} #{calculate_top_10} #{all_times_label}#{all_times}" 

File.open("#{file_name}.calculated", "w") do |f| 
    f << result 
end 

好運調用它在所有得分的文件!