如何使用c删除csv文件中的两个逗号

如何使用c删除csv文件中的两个逗号,c,csv,C,Csv,我的csv文件如下所示: 艾丽斯,女孩,19岁,美女 亚历克,30岁,很酷 现在,如上面的示例所示,第二个条目中有两个逗号。现在,我使用以下c指令读取csv并将其存储在数据结构“data”中: fscanf(filename,"%[^,],%[^,],%d, %[^,]", data.name,data.gender,&data.age,data.att); 如何忽略第二个逗号?我有没有办法写%[^,^,]来容纳这两个逗号 任何帮助都将不胜感激!谢谢 使用strep

我的csv文件如下所示:

艾丽斯,女孩,19岁,美女

亚历克,30岁,很酷

现在,如上面的示例所示,第二个条目中有两个逗号。现在,我使用以下c指令读取csv并将其存储在数据结构“data”中:

fscanf(filename,"%[^,],%[^,],%d, %[^,]", data.name,data.gender,&data.age,data.att);
如何忽略第二个逗号?我有没有办法写
%[^,^,]
来容纳这两个逗号


任何帮助都将不胜感激!谢谢

使用
strep
的示例(勾选省略)

#包括
#包括
#包括
//实现作为示例,因为它不是标准函数
//当它可用时,它是不必要的
字符*STREP(字符**sp,常量字符*sep){
字符*p,*s;
if(sp==NULL | |*sp==NULL | |**sp=='\0')返回NULL;
s=*sp;
p=s+strcspn(s,sep);
如果(*p!='\0')*p++='\0';
*sp=p;
返回s;
}
typedef结构数据{
字符名[32];
性别[8];
智力年龄;
char-att[96];
}数据;
内部主(空){
const char*filename=“data.csv”;
FILE*fp=fopen(文件名,“r”);
数据;
字符buff[128];
字符*token,*p;
while(fgets(buff,sizeof(buff),fp)){
p=浅黄色;
令牌=strep(&p,“,\n”);//第一个字段
strcpy(data.name,token);
令牌=strep(&p,“,\n”);//第二个字段
strcpy(数据、性别、标记);
令牌=strep(&p,“,\n”);//第三个字段
data.age=atoi(令牌);
令牌=strep(&p,“,\n”);//第四个字段
strcpy(data.att,token);
//支票印刷
printf(“调试:\n名称:'%s',性别:'%s',年龄:%d,属性:'%s'\n”,
data.name、data.gender、data.age、data.att);
}
fclose(fp);
}

使用
strep
替换它(如果可用)。对于strep,我如何在我的程序中使用它?我没有输入任何字符串。如果您是从文本文件中读取,则可以使用
fgets
读取每一行。然后您有一个字符串,可以对其应用
strep
。还有一个函数
strtok
,但它不会处理连续的逗号,它会将它们视为一个逗号,即忽略一个“空”字段。
,“
-->
”%*[,]”“
使用
strep
的示例
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

//Implementation as an example as it is not a standard function
//It is unnecessary when it is usable
char *strsep(char **sp, const char *sep){
    char *p, *s;
    if (sp == NULL || *sp == NULL || **sp == '\0') return NULL;
    s = *sp;
    p = s + strcspn(s, sep);
    if (*p != '\0') *p++ = '\0';
    *sp = p;
    return s;
}

typedef struct data {
    char name[32];
    char gender[8];
    int age;
    char att[96];
} Data;

int main(void){
    const char *filename = "data.csv";
    FILE *fp = fopen(filename, "r");

    Data data;
    char buff[128];
    char *token, *p;

    while(fgets(buff, sizeof(buff), fp)){
        p = buff;
        token = strsep(&p, ",\n");//1st field
        strcpy(data.name, token);
        token = strsep(&p, ",\n");//2nd field
        strcpy(data.gender, token);
        token = strsep(&p, ",\n");//3rd field
        data.age = atoi(token);
        token = strsep(&p, ",\n");//4th field
        strcpy(data.att, token);
        //check print
        printf("DEBUG:\nName:'%s', Gender:'%s', Age:%d, Attribute:'%s'\n",
            data.name, data.gender, data.age, data.att);
    }
    fclose(fp);
}