Fichiers
lorchess/parse-games
2015-01-09 15:09:52 +03:00

64 lignes
1.9 KiB
Bash
Fichiers exécutables
Brut Annotations Historique

Ce fichier contient des caractères Unicode ambigus.

Ce fichier contient des caractères Unicode qui peuvent être confondus avec d'autres caractères. Si vous pensez que c'est intentionnel, vous pouvez ignorer cet avertissement. Utilisez le bouton Échappe pour les dévoiler.

#!/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