您的位置:

C语言读取CSV文件存储到数组

一、从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方法分割行数据,并将数据打印到控制台中。