aboutsummaryrefslogtreecommitdiff
path: root/importer
diff options
context:
space:
mode:
Diffstat (limited to 'importer')
-rw-r--r--importer/CMakeLists.txt9
-rw-r--r--importer/main.c71
2 files changed, 80 insertions, 0 deletions
diff --git a/importer/CMakeLists.txt b/importer/CMakeLists.txt
new file mode 100644
index 0000000..587952e
--- /dev/null
+++ b/importer/CMakeLists.txt
@@ -0,0 +1,9 @@
+project(dict_importer VERSION 0.1 LANGUAGES C)
+
+file(GLOB src CONFIGURE_DEPENDS "*.c")
+add_executable(dict_importer ${src})
+
+target_compile_options(dict_importer PRIVATE -Wall -Wextra -Wpedantic -Werror)
+target_include_directories(dict_importer PUBLIC "${PROJECT_BINARY_DIR}" "${PROJECT_SOURCE_DIR}")
+target_link_libraries(dict_importer sqlite3 lib)
+
diff --git a/importer/main.c b/importer/main.c
new file mode 100644
index 0000000..a1850f8
--- /dev/null
+++ b/importer/main.c
@@ -0,0 +1,71 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <unistd.h>
+
+#include "../lib/util.h"
+#include "../lib/data.h"
+
+int run(const char *db, const char *txt);
+
+int main(int argc, char** argv) {
+ int opt;
+ char* txt = NULL;
+ char* db = NULL;
+
+ while ((opt = getopt(argc, argv, "t:d:h")) != -1) {
+ switch(opt) {
+ case 't':
+ txt = copy_achar(optarg);
+ break;
+ case 'd':
+ db = copy_achar(optarg);
+ break;
+ case 'h':
+ // fall through
+ default:
+ printf("Usage: %s", argv[0]);
+ goto end;
+ }
+ }
+
+
+ int r = run(db, txt);
+
+end:
+ if (txt != NULL)
+ free(txt);
+ if (db != NULL)
+ free(db);
+
+ return r;
+}
+
+int run(const char *db, const char *txt) {
+ char * line = NULL;
+ size_t len = 0;
+ int count = 0;
+ ssize_t read;
+ Data *data;
+ FILE *f;
+ int total;
+
+ data = new_data(":memory:");
+ f = fopen(txt, "r");
+
+ bootstrap(data);
+
+ total = count_file_lines(f);
+ fseek(f, 0, SEEK_SET);
+
+ while ((read = getline(&line, &len, f)) != -1) {
+ if (line[0] == '#' || line[0] == '\n')
+ continue;
+
+ insert(data, line, read-1);
+
+ float t = ((float)count/(float)total)*100;
+ printf("\rLoading data [%03.0f%%] %d/%d", t, count, total);
+ }
+
+ return load_or_save_db(data->db, db, 1);
+}