From d102e028aee6571c0fd9dfd4074cfb3c15f4594e Mon Sep 17 00:00:00 2001 From: "Gabriel A. Giovanini" Date: Sat, 17 Feb 2024 11:41:23 +0100 Subject: ref: Refactor newer folder structure Create a lib dict and importer project. * dict: holds the main application * importer: code to read from source to a common database. * lib: shared code --- importer/CMakeLists.txt | 9 +++++++ importer/main.c | 71 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 importer/CMakeLists.txt create mode 100644 importer/main.c (limited to 'importer') 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 +#include +#include + +#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); +} -- cgit v1.2.3