diff options
-rw-r--r-- | data/.store.sh.swp | bin | 12288 -> 0 bytes | |||
-rwxr-xr-x | data/storeSelect.sh | 57 |
2 files changed, 57 insertions, 0 deletions
diff --git a/data/.store.sh.swp b/data/.store.sh.swp Binary files differdeleted file mode 100644 index 0d97b26..0000000 --- a/data/.store.sh.swp +++ /dev/null diff --git a/data/storeSelect.sh b/data/storeSelect.sh new file mode 100755 index 0000000..ae57447 --- /dev/null +++ b/data/storeSelect.sh @@ -0,0 +1,57 @@ +#!/bin/sh +# +# Apunta datos interactivamente. +# +# Estructura del archivo con información sobre cada tabla y primera línea de este archivo: +# # Name # File # AddDate # AddTime # Separator # Prompts... +# El primer caracter de esta primera línea se toma como el caracter de separación entre campos. +# AddDate y AddTime son verdaderos cuando su valor es 'y' y falsos en cualquier otro caso. +# Los _ en los prompts se sustituyen por espacios + +storesDataFile="$HOME/data/stores.dat" +[ ! -f "$storesDataFile" ] && + printf "Error: store data file \"${storesDataFile}\" not found.\n" >&2 && + exit 1 + +dataFileSeparator="$(sed '1q' "$storesDataFile" | grep -Eo '^.')" + +blankLineMarker='@BLANKLINEMARKER@' + +gatherData () { + + shift 1 # table name + + file="$1" + shift 1 + + addDate='' + [ "$1" = 'y' ] && addDate='-d' + shift 1 + + addTime='' + [ "$1" = 'y' ] && addTime='-t' + shift 1 + + separator="$1" + [ "$1" = "$blankLineMarker" ] && separator="' '" + shift 1 + + data='' + for prompt in "$@"; do + fixedPrompt=$(echo "$prompt" | tr '_' ' ') + printf "${fixedPrompt}: " >&2 + read newData + [ -z "$newData" ] && exit 1 + data="${data} ${newData}" + done + store.sh -f "'${file}'" "$addDate" "$addTime" -s "$separator" $data +} + +table="$(grep -Eo "^[^${dataFileSeparator}]+" "$storesDataFile" | fzf)" +[ -z "$table" ] && exit 0 + +tableLine="$(grep "^${table}${dataFileSeparator}" "$storesDataFile")" +tableData=$(echo $tableLine | + tr "$dataFileSeparator" '\n' | + sed "s/^\s*$/${blankLineMarker}/") +gatherData $tableData |