如何将CSV文件中的十进制数转换为C语言float类型变量
将CSV文件中的十进制数转换为C语言float变量的实现
下面是直接可用的C语言代码,能读取指定的data.csv文件,将其中的十进制数转换为float类型数组,并按照你要求的格式输出结果:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_ROWS 100 // 最大行数,可根据需求调整 #define MAX_COLS 10 // 最大列数,可根据需求调整 #define BUFFER_SIZE 256 // 每行的最大缓冲区大小 int main() { FILE *fp; char buffer[BUFFER_SIZE]; float data[MAX_ROWS][MAX_COLS]; int row = 0, col; long filesize; // 打开CSV文件 fp = fopen("data.csv", "r"); if (fp == NULL) { perror("无法打开文件"); return 1; } // 获取文件大小 fseek(fp, 0, SEEK_END); filesize = ftell(fp); fseek(fp, 0, SEEK_SET); // 读取并解析每一行 while (fgets(buffer, BUFFER_SIZE, fp) != NULL && row < MAX_ROWS) { col = 0; // 用逗号分割字符串 char *token = strtok(buffer, ",\n"); while (token != NULL && col < MAX_COLS) { // 将字符串转换为float data[row][col] = atof(token); col++; token = strtok(NULL, ",\n"); } row++; } // 关闭文件 fclose(fp); // 按照指定格式输出结果 printf("------------START OF PROGRAM------------\n"); printf("Filesize: %ld Bytes\n\n", filesize); printf("CSV_content =\n"); for (int i = 0; i < row; i++) { printf("[ "); for (int j = 0; j < MAX_COLS; j++) { // 跳过未赋值的列(如果实际列数小于MAX_COLS) if (j >= col && data[i][j] == 0.0) break; printf("%.6f ", data[i][j]); } printf("]\n"); } printf("\n------------END OF PROGRAM------------\n"); return 0; }
关键代码说明:
- 文件操作:用
fopen打开文件,通过fseek和ftell获取文件大小,完成读取后用fclose释放资源,对应输出中的文件大小信息。 - CSV解析:
fgets逐行读取内容到缓冲区,strtok以逗号、换行符为分隔拆分每行字符串,再用atof将拆分后的十进制数字符串转为float类型,存入二维数组。 - 格式输出:用
printf的%.6f控制符让float值保留6位小数,循环遍历数组按[ xxxxxxx xxxxxxx ... ]的格式逐行输出。
使用注意事项:
- 如果CSV的行数或列数更多,直接调整
MAX_ROWS和MAX_COLS的定义值即可。 - 当前代码适配你提供的简单CSV格式,若需要处理带引号、空字段等复杂CSV场景,可考虑使用专门的CSV解析库。
内容的提问来源于stack exchange,提问作者Self learning student
相关产品推荐
相关产品推荐

