#include "input.h" // Bindet die eigene Headerdatei mit den Konstanten ein. #include // Stellt Funktionen wie strtok(), strlen() und strncpy() bereit. #include // Stellt die Funktion toupper() zum Umwandeln in Grossbuchstaben bereit. #include #include int readWords(FILE *file, char words[][MAX_WORD_LEN], unsigned int maxWordCount) // Liest Woerter aus einer Datei und gibt deren Anzahl zurueck. { int count = 0; /*Als Parameter fuer Words wird der Spaltenanzahl gegeben, der bekannt werden muss, sonst ist die maximale Laenge des Wortes nicht eindeutig.*/ FILE *file_zeiger; file_zeiger = fopen("words.txt", "r"); /*Die Datei mit den Woertern wird geoeffnet.*/ if(file_zeiger == NULL){exit(1);}; /*Code wird terminiert in dem Fall, dass die Datei nicht eingelesen werden kann.*/ char Text_Speicher[1000]; /*1000 weil der .txt File offensichtlich weniger als 1000 Characters besitzt, und passt somit in dieses Array.*/ /*Wir speichern den Text in einen Array, sodass wir mit Zeigerarithmetik arbeiten koennen, was fuer ein File-Pointer nicht geht. Z.B.: (*fgets dereferenziert zeigt nicht auf das Character aus den Text auf der Addresse.) (fgets ++ springt nicht auf die Addresse des naechsten Characters.)*/ int Lese_Ein = fread(Text_Speicher, 1, sizeof(Text_Speicher) - 1, file_zeiger); Text_Speicher[Lese_Ein] = '\0'; fclose(file_zeiger); /*Wir kopieren die Textdatei ins Array.*/ char *fptr = Text_Speicher; /*Weil man die Zeigerarithmetik nicht mit Text_Speicher machen kann.*/ if(fptr != NULL) { while(*fptr != '\0' && count < maxWordCount) { while(*fptr == '\n' || *fptr == ',' || *fptr == ';' || *fptr == ' ' || *fptr == '\t' || *fptr == '\r') { fptr++; } if(*fptr == '\0') break; /*Das wuerde heissen, dass man schon ueber den letzten Element durchgelaufen hat.*/ int char_Index = 0; while(*fptr != '\n' && *fptr != ',' && *fptr != ';' && *fptr != ' ' && *fptr != '\t' && *fptr != '\0') { if (char_Index < MAX_WORD_LEN - 1) { words[count][char_Index] = *fptr; char_Index++; /*char_Index++ = naechste Spalte*/ } fptr++; /*geht auf die naechste Addresse.*/ /*falls man raus aus dieser Schleife geht, heisst das, dass man ein Wort eingelesen hat, da die oben in der Schleife benannten Characters genau diejenige sind, die die Woerter trennen.*/ } while (char_Index < MAX_WORD_LEN) { words[count][char_Index] = '\0'; char_Index++; } /*Wir fuellen den Rest der Zeile mit \0, falls es noch uebrigen Platz gibt (weniger Buchstaben eingelesen als es Raum in der Zeile gibt.)*/ count++; } } return count; }