簡體   English   中英

在C中從文件讀取逗號分隔的值

[英]Reading Comma Separated Values from File in C

我想讀這個

                zeyad,aar,eee,100,sss,55,science
                toto,art,bb,100,ss,55,drawing

從文件中存儲,然后將其存儲在books.title,books.publisher等結構中,如下所示

有人可以告訴我如何不讀取逗號而只將字符串存儲在其位置嗎? 我試過的是在每個字符串之間使用%* C,但是它不起作用。

while (!feof(pBook))
{
    fscanf(pBook,"%s%*c%s%*c%s%*c%s%*c%s%*c%d%*c%s",
        books[z].Title,books[z].Author,books[z].Publisher,books[z].ISBN,books[z].DOP,
        &books[z].Copies,books[z].Category);
    fscanf(pBook,"\n");
    z++;
}
fclose(pBook);

一個簡單的例子(未經測試):

void SeparateCommas(char *FileName)
{
 FILE *fd = fopen(FileName, "r");
 size_t len = 0;
 ssize_t read;
 char *line = NULL;
 char temp[50][32];
 char *token;
 char *end_str;

 while((read = getline(&line, &len, fd)) != -1)
    {
     printf("Read line: %s", line);
     token = strtok_r(line, ",", &end_str);

     while(token != NULL)
         {
          strncpy(temp[i], token, sizeof(temp[i]));
          printf("Read word: %s", temp[i]);
          token = strtok_r(NULL, ",", &end_str);
          i++;
         }
    }       
}

有人可以告訴我如何不讀取逗號而只將字符串存儲在其位置嗎?

由於%s非空格字符序列匹配,因此不能將其用於不讀取逗號 為了您的目的,可以使用%[…] ,它與一組預期字符( scanset )中的一個非空字符序列匹配 ,因此左括號后的 字符為 音符(^),在這種情況下,scanset包含所有不在 抑音符和右括號之間的 字符

    while (fscanf(pBook, "%[^,],%[^,],%[^,],%[^,],%[^,],%d,%s\n",
            books[z].Title, books[z].Author, books[z].Publisher, books[z].ISBN,
            books[z].DOP, &books[z].Copies, books[z].Category) == 7) ++z;

我假設您確保輸入文件中的所有字符串都適合為其各自的結構元素保留的大小,否則您將使用最大字段寬度

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM