diff options
| author | Gabriel A. Giovanini <mail@gabrielgio.me> | 2024-02-17 11:41:23 +0100 | 
|---|---|---|
| committer | gabrielgio <gabrielgio@workstation.lan> | 2024-02-17 16:48:54 +0100 | 
| commit | d102e028aee6571c0fd9dfd4074cfb3c15f4594e (patch) | |
| tree | e0f3bdadc96019de0a7576ea591f8b304a962e67 /importer | |
| parent | c573d3b7954296d95a0f8a79b8ac2ca261d86a02 (diff) | |
| download | dict-d102e028aee6571c0fd9dfd4074cfb3c15f4594e.tar.gz dict-d102e028aee6571c0fd9dfd4074cfb3c15f4594e.tar.bz2 dict-d102e028aee6571c0fd9dfd4074cfb3c15f4594e.zip | |
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
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); +} | 
