繁体   English   中英

如何以CSV格式读取txt文件并将其保存到C数组中

[英]How to read in txt file in CSV format and save into array in C

我是C语言的新手,我需要读取.txt文件,其中每行中都有3个字段,并用逗号分隔,并且需要将其保存到数组中。 我想知道如何做到这一点? 这是一个示例文件:

0, "test", 100
1, "hi", 2
2, "goodbye", 0

所以我想知道如何逐行读取文件并将每个元素存储到数组中。 我首先定义了一个结构:

typedef struct data {
  int col1;
  char *col2;
  int col3;
} data_t;

有人可以帮我开始打开文件吗?

对于文件打开,有一个名为fopen的标准库(包括stdio.h)函数。 它具有以下声明:

FILE *fopen(const char *filename, const char *mode);

如您所见,它期望您为文件名和模式(读/写/读+写)提供一个指向const char的指针。 它会返回一个指向FILE的指针,因此在要使用它的函数中,您必须声明一个这样的代码:

FILE *my_file;

将其初始化为NULL也是一个好主意,以便您可以在使用fopen时检查错误。

在您的主要功能中(仅供阅读):

FILE *my_file = NULL;
my_file = fopen("filename.txt", "r");

并检查返回的指针:

if (my_file == NULL)
    //error message etc.

SQLite外壳程序具有读取CSV的.import命令。 值得研究。 您可以在这里找到它; 搜索CSVReader以查看其编码方式。

只需采样(忽略)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define NUMOFDATA 10

typedef struct data {
    int col1;
    char *col2;
    int col3;
} data_t;

int main(){
    data_t data_array[NUMOFDATA];
    int data_count = 0;
    char line[128];
    FILE *fp;
    fp=fopen("data.txt", "r");
    while(fgets(line, sizeof(line), fp)){
        int col1, col3;
        char col2[64];
        if(sscanf(line, "%d, %63[^,], %d", &col1, col2, &col3)==3){
            char *cl2p = col2;
            data_array[data_count].col1 = col1;
            data_array[data_count].col3 = col3;
            if(col2[0] == '"'){
                char *p = strchr(&col2[1], '"');
                if(p)
                    *p = '\0';
                cl2p = &col2[1];
            }
            data_array[data_count].col2 = strdup(cl2p);
//printf("%d, \"%s\", %d\n",data_array[data_count].col1,data_array[data_count].col2,data_array[data_count].col3);
            if(++data_count == NUMOFDATA)break;
        }
    }
    fclose(fp);
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM