diff --git a/Startcode/input.c b/Startcode/input.c index 7341859..7bdab7e 100644 --- a/Startcode/input.c +++ b/Startcode/input.c @@ -2,49 +2,39 @@ #include #include -// TODO: -// eine Funktion implementieren, die ein einzelnes Wort aus einer Textdatei (words.txt) einliest und als C-String zurückgibt. +#define DELIMITERS " ,;\t\r\n" // Read words from file and store in 'words' array int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount) { char puffer[MAX_LINE_LEN]; - // Delemiter: Ich glaube \n ist nicht erlaubt da einzelne Buchstaben eingelesen werden - char *teiler = " ,;"; - char *token; + unsigned int wordCount = 0; - //counter für die Anzahl der eingelesenen Wörter - int wordCount = 0; - FILE *words_txt_speicherort; //Zeiger auf den Speicherort der word.txt Datei - - words_txt_speicherort = fopen("words.txt","r"); //word.txt öffnen - - if(words_txt_speicherort == NULL) //Abbruch falls words.txt nicht existieren würde + if(file == NULL || words == NULL) + return 0; + + //Liest die Datei Line by Line + while(wordCount < maxWordCount && fgets(puffer, MAX_LINE_LEN, file) != NULL) { - return -1; + //Trennt das erste Wort der Zeichenkette, abhängig von den Teilerbedingungen + char *token = strtok(puffer, DELIMITERS); + + //geht über das token und speichert sie einzeln in Uppercase + while(token != NULL && wordCount < maxWordCount) + { + unsigned int i = 0; + + while(token[i] != '\0' && i < MAX_WORD_LEN -1) + { + words[wordCount][i] = (char)toupper((unsigned char)token[i]); + i++; + } + words[wordCount][i] = '\0'; + wordCount++; + + token = strtok(NULL, DELIMITERS); + } } - fgets(puffer, MAX_LINE_LEN, words_txt_speicherort); //speichert alle Zeichen der words.txt datei in den speicher - - //Trennt das erste Wort der Zeichenkette, abhängig von den Teilerbedingungen - token = strtok(puffer, teiler); - - //Trennt den Rest der Wörter bis die Zeichenkette leer ist - while(token != NULL) { - words[wordCount][MAX_WORD_LEN] = token; - wordCount++; - token = strtok(NULL, teiler); - } - - // TODO: - // * Noch ein Post-Processor der Wörterliste um Füller zu entfernen (Oder in der Funktion) - // * Check für Überlänge? - // * Extra Funktion nach readWords in main.c evtl. - - //speichert nur das einzelne Word in das words array; Problem: Laufindex der global gespeichert werden müsste; wie springe ich beim 2ten Funktionsaufruf zum nächsten Wort - //mit strtok(NULL, delimiter) kann man weiterzerlegen :) - - - - int fclose(words_txt_speicherort); + return wordCount; } \ No newline at end of file diff --git a/Startcode/main.c b/Startcode/main.c index 7d5413e..03da755 100644 --- a/Startcode/main.c +++ b/Startcode/main.c @@ -33,9 +33,6 @@ int main(int argc, char *argv[]) wordCount = readWords(file, words, MAX_NUMBER_OF_WORDS); fclose(file); - // TODO: - // Post-Process words[][] nach den Requirements ../TODO.md - // Create the word salad by placing words into grid placedWords = createWordSalad(wordSalad, SALAD_SIZE, words, wordCount); diff --git a/Startcode/makefile b/Startcode/makefile index 7cf1d4c..41e3c91 100644 --- a/Startcode/makefile +++ b/Startcode/makefile @@ -28,6 +28,12 @@ wordsalad_initial: wordsalad: main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a $(CC) $(CFLAGS) -o wordsalad main.o input.o game.o graphicalGame.o $(BINARIES)/libraylib.a $(LDFLAGS) +wordsalad_myversion: main.o input.o $(BINARIES)/libwordsalad.a $(BINARIES)/libraylib.a + $(CC) $(CFLAGS) -o wordsalad_myversion main.o input.o $(BINARIES)/libwordsalad.a $(BINARIES)/libraylib.a $(LDFLAGS) + +wordsalad_read: input.o $(BINARIES)/libwordsalad.a $(BINARIES)/libraylib.a + $(CC) $(CFLAGS) -o wordsalad_read input.o $(BINARIES)/libwordsalad.a $(BINARIES)/libraylib.a $(LDFLAGS) + main.o: $(codefolder)/main.c $(CC) -c $(CFLAGS) $(codefolder)/main.c @@ -55,5 +61,5 @@ clean: ifeq ($(OS),Windows_NT) del /f *.o *.exe else - rm -f *.o wordsalad $(TEST_BIN) + rm -f *.o wordsalad wordsalad_myversion $(TEST_BIN) endif \ No newline at end of file diff --git a/Startcode/wordsalad_myversion b/Startcode/wordsalad_myversion new file mode 100755 index 0000000..b9ec87d Binary files /dev/null and b/Startcode/wordsalad_myversion differ diff --git a/TODO.md b/TODO.md index e7737c7..2d0c2d3 100644 --- a/TODO.md +++ b/TODO.md @@ -32,12 +32,9 @@ ### Requirements * Eine .txt Datei kann eingelesen werden - * Es wird nach den Trennzeichen: , ; . : - gefiltert um zu trennen + * Es wird nach den Trennzeichen: , ; . : gefiltert um zu trennen * Es sind nur Buchstaben erlaubt, keine Zahlen, Sonderzeichen, etc. * Es werden beliebig viele Füller entfernt bis keine mehr enthalten sind. - * Füller sind Leading oder Trailing: - * " " (Leerzeichen) - * /n * Füller im Wort müssen erkannt werden und Programm beenden. * Wörter werden gleichmäßig klein ODER großgeschrieben werden und so weiterhin gespeichert werden. * Wenn ein eingelesenes Wort länger als das Grid in Horizontal oder Vertikal ist, bricht das Programm ab