gpt4 book ai didi

c - 检索 csv 文件的列 ID

转载 作者:行者123 更新时间:2023-11-30 19:00:03 24 4
gpt4 key购买 nike

我想问是否有任何方法可以使用C编程检索csv文件的列号?默认情况下在 csv 文件中设置的数字以及行名称即:

A B C............ Z AA AB AC......

最佳答案

抱歉兰迪,但你对此有一些很大的误解。 CSV 文件几乎是文本文件,就像您在记事本中创建的那样,单词/值之间恰好有逗号。如果您想用 C 语言读取它们,您可以使用 scanf() 解析每一行 - 要么:

  • 编写一个只能处理一种特定字段布局的程序:如...

    char name[128]; int age; int height_cm; int weight_kg;

    while (scanf("%.128[^,],%d,%d,%d", name, &age, &height_cm, &weight_kg) == 4)
    // do something with the values just read...
  • 尝试将字段解析为各种类型,直到失败:

    char buffer[128];
    char delimiter;
    int num_fields;

    while ((num_fields = scanf("%.128[^,]%c", buffer, delimiter)) >= 1)
    {
    // use e.g. strtod to see if the field might be reasonably interpreted as a double
    ...

    if (num_fields == 1 || delimiter != 'c')
    break; // end of line...
    }

编辑以回应以下评论/问题:

抱歉 - 我只是不明白你在问什么。什么是“增加”数据?如果您的意思是该文件具有代表不同行的不同行,并且具有多个列,那么是的,这是正常的,可以通过我上面列出的方法进行解析。如果您想问“如何保存行/列以供将来处理”,那么您可以使用字段创建一个结构(如果您知道想要对列名称和类型进行硬编码),或者使用数组(可能是最初是字符数据)。然后,您可以拥有这些结构/数组的数组(或链表,如果您有相应的库)。例如:

static const int Max_Persons = 1000;

struct Person { char name[128]; int age; int height_cm; int weight_kg; };

Person persons[Max_Persons];
int num_persons = 0; // how many read from CSV file so far?

while (scanf("%.128[^,],%d,%d,%d",
persons[num_persons].name, &persons[num_persons].age,
&persons[num_persons].height_cm,
&persons[num_persons].weight_kg) == 4)
if (++num_persons == Max_Persons)
{
printf("WARNING: can only handle the first %d people, ignoring rest\n",
Max_Persons);
break;
}

这将读取(从标准输入 - 如果您想直接从命名文件读取,请切换到使用 fopen() 和 fscanf())最多 MAX_LINES 个“Person”行。

如果您不知道数据的数量和类型,则需要使用我之前列出的替代(更复杂)方法:尝试传递每个字段直到失败,检查以逗号结尾的字段与文件结尾。未经测试的想法,例如:

struct Field { char buf[Max_Field_Len]; };
struct Row { Field r[Max_Columns]; };
Data Row[Max_Rows];
int num_columns = 0;
int current_column = 0;
int num_rows = 0;
int num_fields;
char delimiter;
while ((num_fields = scanf("%[^,]%c", Row[num_rows][current_column].buf, &delimiter)) >= 1)
{
if (++current_column > num_columns)
num_columns = current_column;
if (num_fields == 2 && delimiter != ',')
{
current_column = 0;
++num_rows;
}
else if (num_fields == 1)
break; // end-of-file
}

关于c - 检索 csv 文件的列 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5101917/

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