1
Fork 0
lorchess/parse-games

64 lines
1.9 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#!/usr/bin/env bash
# Copyright 2014, 2015 Vladimir Ivanov <ivvl82@gmail.com>
# Distributed under the terms of the GNU General Public License v2
REPO_DIR=
# Specify the tournament here
TOURNAMENT=
function parse_setup {
: ${REPO_DIR:=`dirname "$0"`}
# If no tournament given, set it to the last one
if [[ -z $TOURNAMENT ]]; then
local year_dir=$(ls -1 -d ${REPO_DIR}/[0-9][0-9][0-9][0-9]/ | tail -1)
TOURNAMENT=$(ls -1 -d ${year_dir}[0-9]-*/ | tail -1 \
| sed -E "s|${REPO_DIR}/(.*)/|\1|")
fi
}
function parse_tour_info {
# Add a newline at the end of 'tour_info' to parse the last line
local tour_info=$(cat "${REPO_DIR}/${TOURNAMENT}/tours/${tour}/tour_info"; echo)
local date_re="[0-9?]{2}\.[0-9?]{2}\.[0-9?]{4}"
local res_re="(1|½|0|\+|)"
while read line; do
if [[ $line =~ ^($date_re)\ +([^\ ]+)\ +-\ +([^\ ]+)(\ +$res_re-$res_re)? ]]; then
local date=${BASH_REMATCH[1]}
local white=${BASH_REMATCH[2]}
local black=${BASH_REMATCH[3]}
local result=${BASH_REMATCH[5]}-${BASH_REMATCH[6]}
local round=$(echo "($tour - 1)/($ply_count - 1) + 1" | bc)
parse_to_ini
(( game_counter++ ))
fi
done <<< "$tour_info"
}
function parse_to_ini {
echo "[game${game_counter}]"
echo "round = $round"
[[ ! $date =~ \? ]] && echo "date = $date"
echo "white = $white"
echo "black = $black"
[[ $result == "-" ]] || echo "result = \"$result\""
echo
}
parse_setup
# Configuration file for players
ply_ini=${REPO_DIR}/${TOURNAMENT}/players.ini
ply_count=$(grep "^\[player" "$ply_ini" | wc -l)
tour_seq=$(ls -1 -d ${REPO_DIR}/${TOURNAMENT}/tours/[0-9][0-9]/ \
| sed -E "s|${REPO_DIR}/${TOURNAMENT}/tours/([0-9]{2})/|\1|")
game_counter=1
for tour in $tour_seq; do
parse_tour_info
done
exit 0