gpt4 book ai didi

c - 在C中读取多于1行的csv文件

转载 作者:行者123 更新时间:2023-11-30 19:31:17 25 4
gpt4 key购买 nike

我正在尝试读取超过 1 行的 csv 文件,我已经成功读取了 1 行 csv 文件,有人可以给我一个读取超过 1 行的 csv 文件的示例吗?这是输入示例:

Nama,Gaji,Zakat,Gaji Bersih
Ali,1234567,,
Sofyan,2345678,,
Kholimi,3456789,,

这是我的 1 行 csv 读取源代码:

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

int main(void)
{
char nama[100], gaji[100], zakat[100], bersih[100];

FILE* f = fopen("2.csv", "r");

fscanf(f, "%s %s %s %s", nama, gaji, zakat, bersih);

//delete comma
size_t len = strlen(gaji);
size_t len1 = strlen(nama);
size_t len2 = strlen(zakat);

gaji[len - 1] = '\0';
nama[len1 - 1] = '\0';
zakat[len2 - 1] = '\0';
//delete comma

printf("%s \t %s \t %s \t %s \n", nama, gaji, zakat, bersih);
fclose(f);
return 0;
}

最佳答案

如果您想使用fscanf读取多行,因为它们具有相同的格式,我会用 fgets 读取整行并用 sscanf 解析它,它这样更容易处理格式错误:

int main(void)
{
char nama[100], gaji[100], zakat[100], bersih[100];

FILE* f = fopen("2.csv", "r");

if(f == NULL)
{
fprintf(stderr, "Cannot open file\n");
return 1;
}

char line[1024];
size_t lineno = 0;
while(fgets(line, sizeof line, stdin))
{
lineno++;
if(sscanf(line, "%99s,%99s,%99s,%99s", nama, gaji, zakat, bersih) != 4)
{
fprintf(stderr, "format error on line %zu\n", lineno);
continue;
}

printf("line %zu: name: %s, gaji: %s, zakat: %s, bersih: %s\n", lineno, nama, gaji, zakat, bersih);
}

fclose(f);
return 0;
}

您还可以使用 strtok 来解析 CSV 的行,例如当您不知道有多少列或列有多个空白,等等:

int main(void)
{
FILE* f = fopen("2.csv", "r");

if(f == NULL)
{
fprintf(stderr, "Cannot open file\n");
return 1;
}

char line[1024];
size_t lineno = 0;
const char *delim = ",\n";
while(fgets(line, sizeof line, stdin))
{
lineno++;

char *token = strtok(line, delim);
if(token == NULL)
{
fprintf(stderr, "format error on line %zu\n", lineno);
continue;
}

printf("line %zu:");

do {
printf("-%s- ", token);
} while((token = strtok(NULL, delim)));

putchar('\n');
}

fclose(f);
return 0;
}

对于一行"a,b,c,d,e",它将打印"line 1: -a- -b- -c- -d- ".

关于c - 在C中读取多于1行的csv文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49056424/

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