lorchess/parse-games

68 lines
2.0 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
# Copyright 2014 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 {
[[ -z $REPO_DIR ]] && REPO_DIR=`dirname "$0"`
# Convert REPO_DIR to an absolute path
[[ ! $REPO_DIR =~ ^/ ]] && REPO_DIR=$(cd ${REPO_DIR}; pwd)
# 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|")
# Remove the trailing slash
TOURNAMENT=${TOURNAMENT%/}
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 += 1))
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