Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中解析.csv文件时出现问题,我不知道';我不知道如何告诉我的程序&引用;等于“a”\";_C_Csv_Parsing - Fatal编程技术网

在C中解析.csv文件时出现问题,我不知道';我不知道如何告诉我的程序&引用;等于“a”\";

在C中解析.csv文件时出现问题,我不知道';我不知道如何告诉我的程序&引用;等于“a”\";,c,csv,parsing,C,Csv,Parsing,我目前在一家主机业务的技术支持部门工作,使用Primary cPanel。此外,我正在学习如何编写代码(目前仅使用C)。问题是,我在解析由cPanel创建的csv文件时遇到了问题,这是一个包含所有域信息(Ip、域名、磁盘可用空间等)的列表。到目前为止,我成功解析的所有文件(.txt、.csv、.bin等)都有一行新行,由一个?endofline分隔?(\n在C中,我不知道其他名称如何称为:P),但在这个特定的文件中,一行的结尾由“,,,”分隔,如下所示: 域名,ip,配额,,,,域名,ip,配额

我目前在一家主机业务的技术支持部门工作,使用Primary cPanel。此外,我正在学习如何编写代码(目前仅使用C)。问题是,我在解析由cPanel创建的csv文件时遇到了问题,这是一个包含所有域信息(Ip、域名、磁盘可用空间等)的列表。到目前为止,我成功解析的所有文件(.txt、.csv、.bin等)都有一行新行,由一个?endofline分隔?(\n在C中,我不知道其他名称如何称为:P),但在这个特定的文件中,一行的结尾由“,,,”分隔,如下所示:

域名,ip,配额,,,,域名,ip,配额,,,域名,ip,配额,,,ip,配额

我不知道如何告诉我的程序“,,,,”等于“\n”。到目前为止,我只能读取文件中的第一个域,但这是它返回的唯一记录。目前的守则如下:

void parsear_archivo(ArrayList* lista)
{
    FILE* archivo = abrir_archivo("archivo.csv");
    eDominio* aux;
    char aux_ip[100];
    char aux_nombre_dominio[200];
    char aux_user_name[50];
    char aux_email[100];
    char aux_quota[100];
    char aux_server[100];
    rewind(archivo);
    fscanf(archivo, "%[^,],%[^,],%[^,],%[^\n]\n", aux_nombre_dominio, aux_ip, aux_email,aux_server);
    while (!feof(archivo))
    {
        aux = constructor();
        fscanf(archivo, "%[^,],%[^,],%[^,],%[^\n]\n", aux_nombre_dominio, aux_ip, aux_email,aux_server);
        if (aux != NULL)
        {
            strcpy(aux->ip, aux_ip);
            strcpy(aux->quota, aux_quota);
            strcpy(aux->server, aux_server);
            strcpy(aux->email, aux_email);
            strcpy(aux->nombre_dominio, aux_nombre_dominio);
        }
        lista->add(lista, aux);
    }
    fclose(archivo);
}
对代码的几点评论:我正在使用ArrayList将文件加载到内存中,该文件已经过测试,因此我知道它工作正常;函数constructor()和abrir_archivo()不是这里的问题(我在其他项目中多次使用它们,没有问题-当然,constructor()函数是根据我当前使用的特定结构定制的-)

我对正则表达式了解不多,我知道我现在使用的正则表达式在第一个“,”出现之前一直在文件中读取,但仅此而已

任何帮助都将不胜感激


感谢您并为糟糕的英语感到抱歉。

如果您将
%[^\n]\n
更改为
[^,],,,,
,会发生什么情况?所有转换必须至少匹配一个字符。格式字符串中只有空格表示数据中的可选空格,这仅在转换规范不跳过空格时才相关(即
%c
%[…]
%n
;其他所有内容都跳过前导空格)。因此,您无法将CSV行末尾的
、、、
与转换匹配,例如
%[^、%[^、]、%[^、]、%[^、]、%[^、]、
(在第四个匹配的逗号之后可能有也可能没有另一个
%[^、]
)。在这一点上,您意识到无论是
scanf()
系列还是
strok()
都不是一个好主意。