lorchess/parse-games

73 lines
2.1 KiB
Plaintext
Raw Normal View History

2013-10-01 10:28:23 +04:00
#!/usr/bin/env bash
# Copyright 2014 Vladimir Ivanov <ivvl82@gmail.com>
# Distributed under the terms of the GNU General Public License v2
2013-10-01 10:28:23 +04:00
REPO_DIR=
2013-10-01 10:28:23 +04:00
# Specify the tournament here
TOURNAMENT=
2013-10-01 10:28:23 +04:00
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)
2013-10-01 10:28:23 +04:00
# 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
}
2013-10-01 10:28:23 +04:00
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)
2013-10-01 10:28:23 +04:00
local date_re="[0-9?]{2}\.[0-9?]{2}\.[0-9?]{4}"
local res_re="(1-0|1/2|0-1)"
while read line; do
if [[ $line =~ ^($date_re)\ +([^\ ]+)\ +-\ +([^\ ]+)(\ +$res_re)? ]]; then
local date=${BASH_REMATCH[1]}
local white=${BASH_REMATCH[2]}
local black=${BASH_REMATCH[3]}
local result=${BASH_REMATCH[5]}
2013-10-01 10:28:23 +04:00
[[ $date =~ \? ]] && date=
# Change the representation of result
[[ $result == 1/2 ]] && result=1/2-1/2
2013-10-01 10:28:23 +04:00
local round=$(echo "($tour - 1)/($ply_count - 1) + 1" | bc)
parse_to_ini
((game_counter += 1))
2013-10-01 10:28:23 +04:00
fi
done <<< "$tour_info"
}
function parse_to_ini {
echo "[game${game_counter}]"
echo "round = $round"
echo "date = $date"
echo "white = $white"
echo "black = $black"
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
2013-10-01 10:28:23 +04:00
done
exit 0