[ad_1]
CSV ファイルを C プログラムにインポートし、後でそれを使用してタスクを実行したいと考えています。 残念ながら、インポート中にエラーが発生したようです。機能しません。 理解しやすいようにプログラムを英語に翻訳し、CSV ファイルを添付しました。
GitHub – 420ベラ/時: hfff[^]
ファイルを更新しました。
私が試したこと:
コードを何度か読んでエラーを見つけようとしました
解決策 1
プログラムは while ループでクラッシュしますが、ポインターの最後の値が NULL であるため、これは驚くべきことではありません。
C
Questions *last = NULL; // Pointer to the last element while (fscanf(file, "%d,%99[^,],%19[^,],%19[^,],%19[^,],%19[^,],%c,%9[^,\n]\n", &(last->difficulty), last->question, last->optionA, last->optionB, last->optionC, last->optionD, &(last->answer), last->category) == 8) {
最初に fgets で完全な行を読み取り、次に strtok() で列を検索する方が良いかもしれません。 これには、静的なテキストの長さを扱う必要がないため、より安全で柔軟になるという利点があります。
// 編集1:
csv ファイルには、ハンガリー語の特殊文字が含まれています。 おそらく、これらを文字として読み取るのは困難です。 wchar_t をお勧めします。 オペレーティング システムとコンパイラによっては、他にも考慮すべき点があります。
また、デバッガーを使用するとエラーの場所を特定するのが非常に簡単であることも指摘しておきます。
有意義な回答を可能にするために、オペレーティング システムとコンパイラに関する詳細情報も提供してください。
C++も選択肢になるのでしょうか?
// 編集2:
CSV を読み取ると次のようになります (一部のエラー メッセージが欠落しています)。
C
// prototypes void appendQuestion(Questions** head, Questions* newQuestion); void readCSV(Questions** head, const char* filename); void freeQuestions(Questions* head); void readCSV(Questions** head, const char* filename) { FILE *file = fopen(filename, "r"); if (file == NULL) { perror("Error: Failed to open the file.\n"); return; } wchar_t line[MAX_LINE_LENGTH]; wchar_t delim[] = L";\n"; // Define delimiters wchar_t *token, *context=NULL; fgetws(line, sizeof(line), file); // skip header // Read each line of the CSV file while (fgetws(line, MAX_LINE_LENGTH, file) != NULL) { // create new question Questions* last = (Questions*)malloc(sizeof(Questions)); last->next = NULL; token = wcstok(line, delim, &context); if (!token) break; last->difficulty = _wtoi(token); // 1. column token = wcstok(NULL, delim, &context); if (!token) break; wcsncpy(last->question, token, sizeof(last->question)/sizeof(wchar_t)-1); // 2. column ... appendQuestion(head, last); // append question to the list } // eof while fclose(file); }
[ad_2]
コメント