2014-11-08 110 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 

好运调用它在所有得分的文件!