diff --git a/qscr/c/files/parser/kvparser/kvparser.c b/qscr/c/files/parser/kvparser/kvparser.c new file mode 100644 index 0000000..ba280fb --- /dev/null +++ b/qscr/c/files/parser/kvparser/kvparser.c @@ -0,0 +1,21 @@ +#include "stringchicken.h" + +#include +#include + +int main() { + char myString[100]; + char ch; + FILE *fptr = fopen("./kvtest.txt", "r"); + + struct stringchicken *mystringarray = create_string_chicken(); + + while (fgets(myString, 100, fptr)) { + push_SC(myString, mystringarray); + } + + printchicken(mystringarray); + int mylength = strnlen(myString, 100); + + fclose(fptr); +} diff --git a/qscr/c/files/parser/kvparser/kvtest.txt b/qscr/c/files/parser/kvparser/kvtest.txt new file mode 100644 index 0000000..baa7079 --- /dev/null +++ b/qscr/c/files/parser/kvparser/kvtest.txt @@ -0,0 +1,2 @@ +dit is een test +test2 diff --git a/qscr/c/files/parser/kvparser/stringchicken.c b/qscr/c/files/parser/kvparser/stringchicken.c new file mode 100644 index 0000000..133f1ac --- /dev/null +++ b/qscr/c/files/parser/kvparser/stringchicken.c @@ -0,0 +1,60 @@ +#include "stringchicken.h" + +#include +#include +#include +#include + +/* + parser that can read K=V, maybe also K:V? although would just be configurable seperator + I know python uses dictionary which uses a hash table so key -> hash -> value table + for this assignment, I could use 2 arrays? though that's... a bit dangerous? or at least tricky, in terms of reassignments. + let's just go with a struct with 2 dynamic arrays where the indices are aligned + +ik neem dus eerst 1 die het omzet naar een struct van strings, dan een struct van de KV values. + */ + +struct stringchicken *create_string_chicken(){ + struct stringchicken *mystruct = malloc(sizeof(struct stringchicken)); + mystruct->length = 0; + mystruct->capacity = 2; + + mystruct->data = malloc(sizeof(char*) * mystruct->capacity); + + return mystruct; +} + +void push_SC(char *string_input, struct stringchicken *struct_input){ + if (struct_input->length == struct_input->capacity) { + struct_input->capacity*=2; + char **tempptr = realloc(struct_input->data, sizeof(char*) * struct_input->capacity); + + if (tempptr == NULL) { + exit(1); + } + + struct_input->data = tempptr; + } + + char *newstring = malloc(strnlen(string_input+1, sizeof(char)*101)); + strcpy(newstring,string_input); + struct_input->data[struct_input->length] = newstring; + + struct_input->length++; +} + +void free_SC(struct stringchicken *struct_input){ + for (int i = 0; i < struct_input->length; i++) { + free(struct_input->data[i]); + } + free(struct_input->data); + free(struct_input); +} + + + +void print_SC(struct stringchicken *input_struct){ + for (size_t i = 0; i < input_struct->length; i++) { + printf("line:%zu equals %s", i, input_struct->data[i]); + } +} diff --git a/qscr/c/files/parser/kvparser/stringchicken.h b/qscr/c/files/parser/kvparser/stringchicken.h new file mode 100644 index 0000000..72a14af --- /dev/null +++ b/qscr/c/files/parser/kvparser/stringchicken.h @@ -0,0 +1,17 @@ +#ifndef STRINGCHICKEN_H +#define STRINGCHICKEN_H + +#include + +struct stringchicken{ + char **data; + size_t length; + size_t capacity; +}; + +struct stringchicken *create_string_chicken(void); +void push_SC(char *string_input, struct stringchicken *struct_input); +void printchicken(struct stringchicken *input_struct); + +#endif // STRINGCHICKEN_H +