c语言读取带字符的csv文件的某一列存入数组
时间: 2023-08-13 13:04:22 浏览: 135
可以使用C语言中的文件操作和字符串操作来实现这个功能。以下是一个简单的代码示例:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_LINE_LEN 1024 // 一行最大长度
#define MAX_COL_NUM 128 // 最大列数
int main() {
char filename[] = "data.csv";
char delimiter[] = ","; // 分隔符
int col_index = 2; // 要读取的列号
char line[MAX_LINE_LEN];
char *col_val[MAX_COL_NUM];
int index = 0;
FILE *fp = fopen(filename, "r");
if (fp == NULL) {
printf("Open file failed!\n");
return 1;
}
// 逐行读取文件内容
while (fgets(line, MAX_LINE_LEN, fp)) {
// 使用 strtok 函数分割每行数据
char *token = strtok(line, delimiter);
while (token != NULL) {
if (index == col_index) {
// 如果当前是目标列,则将数据存入数组
col_val[index] = malloc(strlen(token) + 1);
strcpy(col_val[index], token);
}
index++;
token = strtok(NULL, delimiter);
}
index = 0;
}
// 输出结果
for (int i = 0; i < MAX_COL_NUM; i++) {
if (col_val[i] != NULL) {
printf("%s\n", col_val[i]);
free(col_val[i]); // 释放内存
}
}
fclose(fp);
return 0;
}
```
上述代码中,我们使用了 `fgets` 函数逐行读取文件内容,然后使用 `strtok` 函数分割每行数据,找到目标列后将数据存入数组中。最后输出数组中的数据并释放内存。需要注意的是,这里默认文件中的每行数据的列数不超过MAX_COL_NUM,如果实际列数较多,需要根据情况进行修改。
阅读全文