diff options
Diffstat (limited to 'importer')
| -rw-r--r-- | importer/CMakeLists.txt | 9 | ||||
| -rw-r--r-- | importer/main.c | 71 | 
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); +} | 
