C語言讀取csv文件


C語言讀取csv文件

在做中興挑戰賽時,需要讀取csv文件,當時不知道有沒有現成的函數調用,所以自己寫了一個C語言讀取csv文件的函數,沒有測試過性能,后來用matlab實現了挑戰賽,所以就沒有用C語言,貼出來希望如果有大佬的話指教一二

逗號分隔值(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味着該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或制表符。通常,所有記錄都有完全相同的字段序列。通常都是純文本文件。建議使用WORDPAD或是記事本來開啟,再則先另存新檔后用EXCEL開啟,也是方法之一。

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

int get_row(char *filename);
int get_col(char *filename);
void get_relationship(int** data, char* filename, int col);

void main()
{
	char filename[] = "./Example.csv";
   
    int row, col;
    row = get_row(filename);
    col = get_col(filename);
    printf("row = %d, col = %d\n", row, col);
    int **data;
    data = (int **)malloc(row * sizeof(int *));
    for(int i=0; i<row; i=i+1)
    {
        data[i] = (int *)malloc(col * sizeof(int));
    }

    get_relationship(data, filename, col);
    printf("\nhello");
}

int get_row(char *filename)
{
    FILE* stream = fopen(filename, "r");
    int i = 0;

    while(fgetc(stream) != EOF)
    {
        if(fgetc(stream) == '\n')
        {
            i++;
        }
    }
    fclose(stream);
    return i;
}

int get_col(char *filename)
{
    FILE* stream = fopen(filename, "r");
    int i = 0;
    int x;
    while((x = fgetc(stream)) != '\n')
    {
        if(x == ',')
        {
            i++;
        }
    }
    fclose(stream);
    return i+1;
}

void get_relationship(int** data, char* filename, int col)
{
	FILE* stream = fopen(filename, "r");
    char line[2*col+1];
	int i = 0;
	while (fgets(line, 2*col+1, stream))
    {
    	int j = 0;
    	char *tok;
        char* tmp = strdup(line);
        for (tok = strtok(line, ","); tok && *tok; j++, tok = strtok(NULL, ",\n"))
        {
        	data[i][j] = atof(tok);
		}
        i++;
        free(tmp);
    }
    fclose(stream);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM