www.mamboteam.com
aptitude : me and my debian - a work in progress  
Startsida arrow bash arrow Projekt ordlista, 3
2008-05-13
 
 
Huvudmeny
Startsida
debian
bash
Forum
Användarmeny
tidigare material
nyheter
grafik
Artikeltips
BadVista
Projekt ordlista, 3  E-post

Detta är del tre i artikelserien 'projekt ordlista'.
Läs också del 1 och del 2.

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)Add Comment

Skriv kommentar

busy
 
< Föregående   Nästa >
 
Top! Top!