gpt4 book ai didi

c - 使用逗号在 c 中解析 .csv 文件时出现问题

转载 作者:行者123 更新时间:2023-11-30 16:10:34 24 4
gpt4 key购买 nike

我正在使用此代码来解析 C 中的 .csv 文件。如果字段采用这种格式,则有效条目1,条目2,条目3,条目4或者即使这里有逗号:条目1、条目2、条目3、条目4但是,如果条目之后和逗号之前有空格,程序就会崩溃。像这样: ENTRY1 ,ENTRY2,ENTRY3,ENTRY4代码:

#include <stdio.h>
#include <string.h>

int main()
{
FILE *input_fp =fopen("file", "r");
char buf[100];

while (fgets(buf, sizeof buf, input_fp) != NULL) {
char field1[30], field2[30], field3[30], field4[30];
#define VFMT " %29[^ ,\n\t]" //Defines limit of one entry to be 30 characters
int n; // Use to check for trailing junk

if (4 == sscanf(buf, VFMT "," VFMT "," VFMT "," VFMT " %n", field1, field2,
field3, field4, &n) && buf[n] == '\0') {
// Suspect OP really wants this wfield1th to be 1 more
if (printf("%s %s %s %s\n", field1, field2, field3, field4) < 0)
break;
} else
break; // format error
}
fclose(input_fp);
return 0;
}

运行示例:文件包含:

ENTRY1, ENTRY2, ENTRY3, ENTRY4
ENTRY5,ENTRY6,ENTRY7,ENTRY8
ENTRY5 , ENTRY6, ENTRY7, ENTRY8
ENTRY1, ENTRY2, ENTRY3, ENTRY4

输出是:

ENTRY1 ENTRY2 ENTRY3 ENTRY4
ENTRY5 ENTRY6 ENTRY7 ENTRY8

它在结束第三行之前停止并退出。

最佳答案

根据您的示例和预期输出,我更愿意使用 fgetc 来处理输入字符。

这将使我们能够解析并拒绝不需要的字符,从而避免存储数据的开销 - 如 fgets 中,然后解析存储的数据。

结果 (fputc) 也可以定向到文件...

代码看起来像这样......希望这有帮助......

#include <stdio.h>

int main()
{
FILE *input_fp =fopen("file", "r");
int c;
while ((c=fgetc(input_fp)) != EOF)
{
if(c == ' ' || c == '\t')//if space or tab
; //do nothing
else
fputc(c,stdout); //print c
}
fclose(input_fp);
return 0;
}

关于c - 使用逗号在 c 中解析 .csv 文件时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58859845/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com