[英]Parsing file txt C
伙計們,我在代碼的這一部分:
void token(){
FILE *pointer;
user record;
pointer = fopen("utente_da_file.txt","r+");
printf("OK");
fscanf(pointer , "%s, %s, %s, %s, %s \n" , record.nome_utente , record.nome , record.cognome , record.data_di_nascita , record.data_di_iscrizione);
fclose(pointer);
printf("TEXT -> %s \n" , record.nome_utente);
}
這是utente_da_file.txt
cocco,ananas,banana,ciao,miao
這是我的輸出:
TEXT -> cocco,ananas,banana,ciao,miao
我不明白為什么。 問候 :)
這是由於scanf系列中%s參數的性質所致:它消耗所有字符,直到遇到的第一個空格字符–或直到輸入結束,以先到者為准( scanf -OK,C ++文檔,但適用於C一樣)。 由於您的文件中沒有空格,因此可以立即使用整個內容(包括逗號),然后再以格式字符串對其進行掃描...
如果您檢查了(f)scanf的返回值,您將得到提示-它返回填充的變量數,因此您應該以1作為返回值。
(f)scanf系列的問題是,您無法指定分隔符來停止字符串。 因此,在您的情況下,您將不得不在文件的單詞之間添加空格。 但要注意,逗號將字符串的一部分,那么,如果你在他們之后追加的空白,你就必須追加空格之前 ,使您的格式字符串可以使用它們-這可能使你的文件難看,雖然如此,你可能更喜歡然后將其完全刪除(但也將它們放在格式字符串中!)。
另外,您可以使用fgets一次讀取整行,然后使用strtok對其進行解析。 整個過程可能類似於以下代碼:
char buffer[256];
fgets(buffer, sizeof(buffer), pointer);
char const* delimiters = ", \t\n\r";
char* token = strtok(buffer, delimiters);
if(token)
{
strncpy(record.nome_utente, token, sizeof(record.nome_utente));
if((token = strtok(NULL, delimiters)))
{
strncpy(record.nome, token, sizeof(record.nome));
// rest alike...
}
}
對我而言,最好的解決方案是以這種方式編寫thr C代碼(2%s之間的空格):
fscanf(pointer , "%s %s %s %s %s \n" , record.nome_utente , record.nome , record.cognome , record.data_di_nascita , record.data_di_iscrizione);
並以這種方式寫入文本文件(兩個記錄之間的空格):
cocco ananas banana ciao miao
通過這種方式,我確定它會很好地工作。 Ciao e buona fortuna。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.