一、从C语言读取CSV文件例题
CSV,即逗号分隔符文件,是一种常用于存储和交换数据的文件格式。CSV文件的每一行都是一条数据记录,每个字段使用逗号进行分隔。下面是一个简单的CSV文件示例:
"Name","Age","Gender"
"John",25,"Male"
"Alice",30,"Female"
"Bob",20,"Male"
下面是从C语言读取CSV文件的代码示例:
//打开文件
FILE* fp = fopen("data.csv", "r");
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
//读取文件
char line[1024];
while (fgets(line, 1024, fp)) {
//分割行数据
char* tok;
for (tok = strtok(line, ","); tok && *tok; tok = strtok(NULL, ",\n")) {
printf("%s ", tok);
}
printf("\n");
}
//关闭文件
fclose(fp);
上述代码首先使用标准C库函数fopen打开了CSV文件,然后使用fgets逐行读取文件内容。在每一行读取完成后,使用strtok函数分割行数据,然后将每个字段打印出来。
二、读取CSV文件的某一列数据
在实际应用中,有时只需要读取CSV文件中的某一列数据。下面是读取CSV文件中某一列数据的代码示例:
//打开文件
FILE* fp = fopen("data.csv", "r");
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
//读取文件
char line[1024];
while (fgets(line, 1024, fp)) {
//分割行数据
char* tok;
int col = 0;
for (tok = strtok(line, ","); tok && *tok; tok = strtok(NULL, ",\n")) {
if (col == 1) { //读取第二列数据
printf("%s\n", tok);
break;
}
col++;
}
}
//关闭文件
fclose(fp);
上述代码在读取每一行数据时,使用计数器col记录当前读取的字段数量,当读取到第二列数据时,将其打印出来。
三、CSV文件数据读取
CSV文件可能包含各种各样的数据,因此在读取CSV文件时需要进行数据类型的转换。下面是一个读取CSV文件数据的代码示例:
//打开文件
FILE* fp = fopen("data.csv", "r");
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
//读取文件
char line[1024];
while (fgets(line, 1024, fp)) {
//分割行数据
char* tok;
int col = 0;
char name[32];
int age;
char gender[8];
for (tok = strtok(line, ","); tok && *tok; tok = strtok(NULL, ",\n")) {
switch (col) {
case 0:
strcpy(name, tok);
break;
case 1:
age = atoi(tok);
break;
case 2:
strcpy(gender, tok);
break;
default:
break;
}
col++;
}
//处理数据
//...
}
//关闭文件
fclose(fp);
上述代码使用switch语句将CSV文件中的字符串数据转换为int或char类型数据。
四、C读取文件存入数组
在读取CSV文件时,通常需要将读取到的数据存储在数组中,方便后续处理。下面是将CSV文件中的数据存储在数组中的代码示例:
//打开文件
FILE* fp = fopen("data.csv", "r");
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
//定义数组
#define MAX_ROWS 100
#define MAX_COLS 4
char data[MAX_ROWS][MAX_COLS][32];
int row = 0;
//读取文件
char line[1024];
while (fgets(line, 1024, fp)) {
//分割行数据
char* tok;
int col = 0;
for (tok = strtok(line, ","); tok && *tok; tok = strtok(NULL, ",\n")) {
strcpy(data[row][col], tok);
col++;
}
row++;
}
//关闭文件
fclose(fp);
上述代码定义了一个3维字符数组data,使用二重循环将CSV文件中的数据存储在数组中。
五、读取CSV文件中的数据用什么包
读取CSV文件时,有很多第三方包可以使用,从而简化开发过程。下面是几个常用的C语言读取CSV文件的包:
- libcsv:基于C语言的CSV文件解析器,可快速读取并解析CSV文件。
- OpenCSV:Java语言的CSV文件解析器,支持从各种数据源中读取CSV文件。
- CSVeed:基于Java语言的CSV文件解析器,提供了丰富的CSV解析选项。
六、C读取HEX文件存入数组
与CSV文件类似,HEX文件也是一种经常使用的文件格式。HEX文件是一种用于编程器件中的机器语言代码的格式,即程序可以通过HEX文件格式被烧录到芯片中。下面是将HEX文件存储在数组中的代码示例:
//打开文件
FILE* fp = fopen("data.hex", "r");
if (fp == NULL) {
printf("无法打开文件\n");
return 1;
}
//定义数组
#define MAX_ROWS 100
#define MAX_COLS 16
unsigned char data[MAX_ROWS][MAX_COLS];
int row = 0;
//读取文件
char line[1024];
while (fgets(line, 1024, fp)) {
//解析HEX文件格式
//...
memcpy(data[row], hex_data, sizeof(hex_data));
row++;
}
//关闭文件
fclose(fp);
上述代码将读取到的HEX文件数据存储在一个二维unsigned char数组中,方便后续处理。
七、C#读取CSV文件
在.NET Framework中,可以使用StreamReader类读取CSV文件。下面是一个读取CSV文件的代码示例:
using System.IO;
//打开文件
StreamReader sr = new StreamReader("data.csv");
if (sr == null) {
Console.WriteLine("无法打开文件");
return;
}
//读取文件
while (!sr.EndOfStream) {
string line = sr.ReadLine();
string[] fields = line.Split(',');
foreach (string field in fields) {
Console.Write(field + " ");
}
Console.WriteLine();
}
//关闭文件
sr.Close();
上述代码将打开一个CSV文件,使用Split方法分割行数据,并将数据打印到控制台中。