我是C的新手,我需要读一个.txt文件,其中每行有3个字段用逗号分隔,我需要将它保存到数组中。我想知道怎么做? 这是一个示例文件:
0, "test", 100
1, "hi", 2
2, "goodbye", 0
所以我想知道如何逐行读取文件并将每个元素存储到一个数组中。我已经开始定义一个结构:
typedef struct data {
int col1;
char *col2;
int col3;
} data_t;
有人可以帮我开始打开文件吗?
答案 0 :(得分:0)
对于文件打开,有一个名为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.
答案 1 :(得分:0)
SQLite shell有一个读取CSV的.import命令。值得研究。你可以找到它here;搜索CSVReader
以查看其编码方式。
答案 2 :(得分:0)
简单地采样(检查省略)
#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;
}