;**************
; REQUIREMENTS*
;**************
; AutoHotkey Version 2 (AutoHotkey_2.0-a100-52515e2)
; https://www.autohotkey.com/download/2.0/AutoHotkey_2.0-a100-52515e2.zip
; sqlite3.dll located in A_ScriptDir (i.e., the directory that contains this .ahk file)
; https://sqlite.org/2019/sqlite-dll-win32-x86-3270200.zip (32-bit)
; Or
; https://sqlite.org/2019/sqlite-dll-win64-x64-3270200.zip (64-bit)
; Class_SQLiteDB.ahk located in A_ScriptDir
; https://pastebin.com/mJ4gFVCv
; Chinese-English glossary file (excerpt from CC-CEDICT) in A_ScriptDir
; https://pastebin.com/BS3KnzRL
; Official link to complete CC-CEDICT
; https://cc-cedict.org/editor/editor_export_cedict.php?c=zip
;*************
; DISCLAIMER:*
;*************
; This software is provided 'as-is', without any express or implied warranty.
; In no event will the authors be held liable for any damages arising from the
; use of this software.
;************************
; INCLUDE SQLITE WRAPPER*
;************************
#Include Class_SQLiteDB.ahk
;*******************************************
; SPECIFY NAME FOR DATABASE AND DATA SOURCE*
;*******************************************
db_file := A_ScriptDir . "\ce_glossary.sqlite"
;source_files := A_ScriptDir . "\chinese_english\*.txt"
source_files := A_ScriptDir . "\CC-CEDICT.txt"
;***********************************************************************************
; READ IN DATA (COULD BE MEMORY INTENSIVE STORING ALL ENTRIES IN ASSOCIATIVE ARRAY)*
;***********************************************************************************
dict := {} ; use associative array to remove duplicates
FileEncoding("UTF-8")
Loop Files, source_files
{
Loop Read, A_LoopFileFullPath
{
dict[A_LoopReadLine] := 1
}
}
;***********************************
; OPEN DATABASE OR CREATE A NEW ONE*
;***********************************
db := New SQLiteDb
If !db.OpenDb(db_file)
{
MsgBox("SQLite Error OpenDb`n`nMessage: " . db.ErrorMsg . "`nCode: " . db.ErrorCode . "`nFile: " . db_file)
ExitApp()
}
;***********************
; CREATE DATABASE TABLE*
;***********************
sql_cmd := "CREATE TABLE glossary (id INTEGER PRIMARY KEY, chinese TEXT, english TEXT)"
If !db.Exec(sql_cmd)
{
MsgBox("SQLite CREATE Error`n`nMessage: " . db.ErrorMsg . "`nCode: " . db.ErrorCode . "`nQuery: " . sql_cmd)
ExitApp()
}
;**********************************************************
; CREATE INSERT STATEMENT (COULD ALSO BE MEMORY INTENSIVE)*
;**********************************************************
insert_query := "INSERT INTO glossary (chinese, english) VALUES"
For key, value In dict
{
c_e := StrSplit(key, A_Tab,, 2)
insert_query .= '("' . c_e[1] . '", "' . c_e[2] . '"),'
}
insert_query := RegExReplace(insert_query, ',$', ';') ; replace trailing comma with semicolon
;**************************
; EXECUTE INSERT STATEMENT*
;**************************
sql_cmd := insert_query
result := db.Exec(sql_cmd)
If (result)
{
MsgBox("Inserted " . db.Changes . " rows.")
}
Else
{
MsgBox("SQLite Insert Error`n`nMessage: " . db.ErrorMsg . "`nCode: " . db.ErrorCode . "`nQuery: " . sql_cmd)
ExitApp()
}
;*****************************
; MAKE A QUERY (FUZZY SEARCH)*
;*****************************
;search_query := Clipboard ; could set up a hotkey and then grab search query from clipboard
search_query := '職業'
query := "SELECT chinese, english FROM glossary WHERE chinese LIKE '%" . search_query . "%'"
sql_cmd := query
If !db.Query(sql_cmd, query_result)
{
MsgBox("SQLite QUERY Error`n`nMessage: " . db.ErrorMsg . "`nCode: " . db.ErrorCode . "`nFile: " . db_file . "`nQuery: " . sql_cmd)
ExitApp
}
search_result := ''
Loop
{
result := query_result.Next(row)
If !result
{
MsgBox("SQLite NEXT Error`n`nMessage: " . db.ErrorMsg . "`nCode: " . db.ErrorCode)
ExitApp
}
If result = -1
{
Break
}
Loop query_result.ColumnCount
{
search_result .= row[A_Index] . A_Tab
}
search_result .= '`n'
}
query_result.Free()
MsgBox(search_result)
Comments
0 B
|👍
/👎
0 B
|👍
/👎