| Projekt ordlista, 3 | E-post |
|
Detta är del tre i artikelserien 'projekt ordlista'. När jag tittar på databasen, är den kanske inte optimal. I tabellen 'word' är 'id' exempelvis primärnyckel. Ord i den tabellen är unika och borde istället vara primärnyckeln. Det skulle snabba upp sökningen. Men... nu är det som det är. Här är en skiss till ett BASH-script som kan söka på ord i ledtrådar; lägga till nya ord och ledtrådar; radera ledtrådar samt radera ord och alla dess tillhörande ledtrådar. Scriptet innehåller inte kontroller för indata eftersom det är jag själv som ska använda det och knappast lär ställa till med någon större förödelse. Det är heller inte testat i någon vidare omfattning. #!/bin/bash DIR=~/bin DB=$DIR/words.db function showHelp { echo "-------------------------------------------------------" echo " words --help | -h Show this help" echo " -aw word \"lead\" Add word and lead to database" echo " -fw lead Find words containing string 'lead'" echo " -rl word List leads with option to remove" echo " -rw word Remove word and all its leads" echo "-------------------------------------------------------" exit 0 } function getID { QUERY="select id from word where word='$WORD'" ID=`sqlite3 $DB "$QUERY"` } function doQuery { #echo "[$QUERY]" sqlite3 $DB "$QUERY" } function getResult { RES=`sqlite3 $DB "$QUERY"` } case $1 in # SHOW HELP ""|"--help"|"-h") showHelp ;; # ADD WORD "-aw") WORD=$2 LEAD=$3 getID if [ "$ID" == "" ]; then echo "Adding word '$WORD'" QUERY="INSERT INTO word VALUES(NULL, '$WORD');" doQuery if [ -z "$LEAD" ]; then echo "No lead given, word not existing : added word ($WORD)" exit 0 else getID echo "Word not existing : added word and lead" QUERY="INSERT INTO lead VALUES('$LEAD','$ID');" doQuery exit 0 fi else echo "Word '$WORD' already exist id($ID)" if [ -z "$LEAD" ]; then echo "Word exist (id:$ID), no lead given : exit" exit 1 else echo "Word exist : adding lead" QUERY="INSERT INTO lead VALUES('$LEAD','$ID');" doQuery exit 0 fi fi ;; # FIND WORD "-fw") QUERY="SELECT word.word, lead.lead FROM word, lead WHERE (word.id = lead.wordID AND lead like '%$2%');" doQuery exit 0 ;; # REMOVE WORD AND ALL ITS LEADS "-rw") WORD=$2 getID if [ -z "$ID" ]; then echo "Unable to find word" exit 1 else QUERY="DELETE FROM word where id=$ID"; doQuery QUERY="DELETE FROM lead WHERE wordID=$ID"; doQuery echo "words and leads with id '$ID' removed" exit 0 fi ;; # LIST LEADS WITH OPTION TO REMOVE "-rl") WORD=$2 getID if [ -z "$ID" ]; then echo "Unable to find word" exit 1 else QUERY="SELECT lead FROM lead WHERE wordID=$ID" doQuery >$DIR/words.tmp cat -n $DIR/words.tmp >words.slask cat $DIR/words.slask echo "select lead to be deleted, 0 to exit" read -n2 DELETE if [ "$DELETE" == "0" ]; then echo "exiting" exit 0 fi LEAD=`sed "$DELETE,$DELETE!d" $DIR/words.tmp` QUERY="DELETE FROM lead WHERE lead='$LEAD';" doQuery echo "lead #$DELETE ($LEAD) deleted" rm $DIR/words.tmp rm $DIR/words.slask exit 0 fi ;; # UNKNOWN *) echo "Unknown command" exit 1 ;; esac Kommentarer (0)
![]() Skriv kommentar
|
| < Föregående | Nästa > |
|---|





