require 'time'
require 'pathname'
require 'getoptlong'
+require 'nkf'
class CsaFileReader
WIN_MARK = "win"
DRAW_MARK = "draw"
attr_reader :file_name
+ attr_reader :str
attr_reader :black_name, :white_name
attr_reader :black_id, :white_id
attr_reader :winner, :loser
+ attr_reader :state
attr_reader :start_time, :end_time
def initialize(file_name)
end
def grep
- str = File.open(@file_name).read
+ @str = File.open(@file_name, "r:Shift_JIS:EUC-JP").read
- if /^N\+(.*)$/ =~ str then @black_name = $1.strip end
- if /^N\-(.*)$/ =~ str then @white_name = $1.strip end
- if /^'summary:(.*)$/ =~ str
- state, p1, p2 = $1.split(":").map {|a| a.strip}
- return if state == "abnormal"
+
+ if /^N\+(.*)$/ =~ @str then @black_name = $1.strip end
+ if /^N\-(.*)$/ =~ @str then @white_name = $1.strip end
+ if /^'summary:(.*)$/ =~ @str
+ @state, p1, p2 = $1.split(":").map {|a| a.strip}
+ return if @state == "abnormal"
p1_name, p1_mark = p1.split(" ")
p2_name, p2_mark = p2.split(" ")
if p1_name == @black_name
raise "Never reach!: #{black} #{white} #{p3} #{p2}"
end
end
- if /^\$START_TIME:(.*)$/ =~ str
+ if /^\$START_TIME:(.*)$/ =~ @str
@start_time = Time.parse($1.strip)
end
- if /^'\$END_TIME:(.*)$/ =~ str
+ if /^'\$END_TIME:(.*)$/ =~ @str
@end_time = Time.parse($1.strip)
end
- if /^'rating:(.*)$/ =~ str
+ if /^'rating:(.*)$/ =~ @str
black_id, white_id = $1.split(":").map {|a| a.strip}
@black_id = identify_id(black_id)
@white_id = identify_id(white_id)
end
end
+ def movetimes
+ ret = []
+ @str.gsub(%r!^T(\d+)!) do |match|
+ ret << $1.to_i
+ end
+ return ret
+ end
+
def to_s
return "Summary: #{@file_name}\n" +
"BlackName #{@black_name}, WhiteName #{@white_name}\n" +
eval "$OPT_#{name.sub(/^--/, '').gsub(/-/, '_').upcase} = '#{arg}'"
end
rescue
- puts "hoge"
usage
end
if $OPT_PLAYERS
players = $OPT_PLAYERS.split(",")
- unless (csa.black_id.index(players[0]) == 0 &&
- csa.white_id.index(players[1]) == 0) ||
- (csa.black_id.index(players[1]) == 0 &&
- csa.white_id.index(players[0]) == 0)
+ unless (csa.black_id.downcase.index(players[0].downcase) == 0 &&
+ csa.white_id.downcase.index(players[1].downcase) == 0) ||
+ (csa.black_id.downcase.index(players[1].downcase) == 0 &&
+ csa.white_id.downcase.index(players[0].downcase) == 0)
next
end
end
if $OPT_BLACK
- next unless csa.black_id.index($OPT_BLACK) == 0
+ next unless csa.black_id.downcase.index($OPT_BLACK.downcase) == 0
end
if $OPT_WHITE
- next unless csa.white_id.index($OPT_WHITE) == 0
+ next unless csa.white_id.downcase.index($OPT_WHITE.downcase) == 0
end
puts csa.file_name
end