From e34431e810c4d4a6efcc710d9dbe3ffe61294a5b Mon Sep 17 00:00:00 2001 From: wildjan Date: Sat, 14 Dec 2024 16:42:54 +0100 Subject: [PATCH] csv schreiben und lesen --- src/db.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 97 insertions(+), 14 deletions(-) diff --git a/src/db.c b/src/db.c index 7240bb8..b83e02c 100644 --- a/src/db.c +++ b/src/db.c @@ -18,25 +18,108 @@ #include "list.h" /* -write a complete linkedlist to a csv file. +write a complete linkedlist to a Event csv file. */ void write_linkedlist_to_csv(llist* head, const char* filename) { - //Open file with write permision - FILE* file = fopen(filename, "w"); - //if there is no file or a wrong file path you becom an error + //Open file with write permision + FILE* file = fopen(filename, "w"); + //if there is no file or a wrong file path you becom an error + if (file == NULL) { + perror("Could not open file %s\n", filename); + } + else{ + //write the file header + fprintf(file, "TaskName, Created, Deadline, Priority, Spare, EventStartTime, EventEndTime, EventSpare\n"); + + // Iterate through the linked list and write the data to the CSV + llist* current = head; + while (current != NULL) { + // Extract data from the current node + Event* event = (Event*)current->data; // Assumed that current->data holds an Event pointer + + // Extract the associated task from the event + Task* task = event->task; + + // Write the task and event data to the CSV file + fprintf(file, "%s, %lu, %lu, %d, %lu, %lu, %lu, %lu\n", + task->name, + task->created, + task->deadline, + task->priority, + task->spare, + event->plannedStartTime, + event->plannedEndTime, + event->spare); + + current = current->next; + } + fclose(file); // Close the file + } +} + +/* +read an event csv file and write the data in a linked list + */ + +void write_csv_to_llist(const char* filename) { + //Open file with read permision + FILE* file = fopen(filename, "r"); if (file == NULL) { - printf("Could not open file %s\n", filename); + perror("Could not open file %s\n", filename); } else{ - //write the file head - //fprintf(file, "**********************"); + char line[1024]; //Line Buffer + int count = 0; //task counter + llist *list = NULL + fgets(line, sizeof(line), file); //read and ignore file head + while (fgets(line, sizeof(line), file)) { + count++; + //remove newline sign + line[strcspn(line, "\n")] = '\0'; - // iteration through the list and write data to csv - llist* current = head; - while (current != NULL) { - //fprintf(file, "%d \n", current->id ); - current = current->next; + // column slice + char *taskname = strtok(line, ","); + char *tsakcreation_dateSTR = strtok(NULL, ","); + char *tsakdeadline_dateSTR = strtok(NULL, ","); + char *tsakprioritySTR = strtok(NULL, ","); + char *tsakspareSTR = strtok(NULL, ","); + char *eventStartTimeSTR = strtok(NULL, ","); + char *eventEndTimeSTR = strtok(NULL, ","); + char *eventSpareSTR = strtok(NULL, ","); + + // convert char in integer and date + unsigned long int taskcreation_date = strtoul(taskcreation_dateSTR,NULL,10); + unsigned long int taskdeadline_date = strtoul(taskdeadline_dateSTR,NULL,10); + unsigned long int taskspare = strtoul(taskspareSTR,NULL,10); + unsigned long int eventStartTime = strtoul(eventStartTimeSTR,NULL,10); + unsigned long int eventEndTime = strtoul(eventEndTimeSTR,NULL,10); + unsigned long int eventSpare = strtoul(eventSpareSTR,NULL,10); + + int priority = atoi(prioritySTR); + + + + //create Task + Task *task = newTask(taskname, taskcreation_date, taskdeadline_date, taskpriority, taskspare); + + //create Event + Event *event = newEvent(task,eventStartTime, eventEndTime, eventSpare); + + // Insert task into the linked list + if (list == NULL) { + // If the list is empty, initialize it with the first task + list = llistNew(event, NULL); + } + else { + // Append the task to the linked list + llistAppend(list, event); + } } - fclose(file) + + fclose(file); } -} \ No newline at end of file + + + +} +