aboutsummaryrefslogtreecommitdiff
path: root/data/storeSelect.sh
diff options
context:
space:
mode:
Diffstat (limited to 'data/storeSelect.sh')
-rwxr-xr-xdata/storeSelect.sh57
1 files changed, 57 insertions, 0 deletions
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