-def grep(file)
- black_name = nil
- white_name = nil
- black_mark = nil
- white_mark = nil
- black_id = nil
- white_id = nil
- time = nil
-
- lines = StringIO.new File.open(file).read
-
- lines.each_line do |str|
- case str
- when /^N\+(.*)$/
- black_name = $1.strip
- when /^N\-(.*)$/
- white_name = $1.strip
- when /^'summary:(.*)$/
- 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
- black_name, black_mark = p1_name, p1_mark
- white_name, white_mark = p2_name, p2_mark
- elsif p2_name == black_name
- black_name, black_mark = p2_name, p2_mark
- white_name, white_mark = p1_name, p1_mark
- else
- raise "Never reach!: #{black} #{white} #{p3} #{p2}"
- end
- when /^'\$END_TIME:(.*)$/
- time = Time.parse($1.strip)
- end # case
- end # each line
-
- if /^'rating:(.*)$/ =~ lines.string
- black_id, white_id = $1.split(":").map {|a| a.strip}
- black_id = identify_id(black_id)
- white_id = identify_id(white_id)
- if black_id && white_id && (black_id != white_id) &&
- black_mark && white_mark
- add(black_mark, black_id, white_id, white_mark, time)
+# Parse a game result line
+#
+def parse(line)
+ if $history.include? line
+ $stderr.puts "[WARNING] Duplicated: #{line}"
+ return
+ end
+ $history.add line
+
+ time, state, black_mark, black_id, white_id, white_mark, file = line.split("\t")
+ unless time && state && black_mark && black_id &&
+ white_id && white_mark && file
+ $stderr.puts "Failed to parse the line : #{line}"
+ return
+ end
+
+ if state == "abnormal"
+ csa = CsaFileReader.new file
+ if $options["abnormal-threshold"] == 0 || csa.ply <= $options["abnormal-threshold"]
+ return