标签:
csv文件读取c实现动态二维数组分配释放 |
分类: VC |
最近有个项目要读取Csv文件的内容,Csv文件还是蛮常用,所以想封装好,便于以后使用。
使用方法可以从下面的main函数看出来,首先用ReadCsvData读取Csv文件到一个数组中,然后就可以使用GetCsvData读取想要的某行的数据了,最后结束时要用FreeCsvData释放空间。
#include <stdio.h>
#include <stdlib.h> // For
system("pause");
#include "ReadCsvFile.h"
void main(){
}
运行结果如下
The file REF.csv was read successfully
-30894
-30876
-30858
-30804
-30749
-30568
-30314
-29988
-29590
请按任意键继续. . .
封装文件如下:
ReadCsvFile.h:
void FreeCsvData();
int ReadCsvData(char* csvFilePath);
void GetCsvData(int iIndex, double* dAimPos);
ReadCsvFile.c:
//////////////////////////////////////////////////////////////////////////
// Read csv file data
//////////////////////////////////////////////////////////////////////////
#include <stdio.h>
#include <memory.h> // for
memset
#include <stdlib.h> // For malloc,
free
#define MAX_LINE_SIZE 256
#define GET_DATA(row, col) gdCsvData[(row - 1)*giNumCol + col - 1]
// row为1到giNumRow,col为1到giNumCol 使用一维数组,动态分配、释放更方便
double* gdCsvData = NULL;
int giNumData = 0;
int giNumRow = 0;
int giNumCol = 7; // 文件中一行有多少数据,这个要根据实际文件定,还要相应改ReadCsvData函数中sscanf_s的读取个数
// get total lines of file 此函数可以单独拿来用,可以获取文本文件的有效行数
int GetTotalLineCount(FILE* fp)
{
}
// assign space for gdCsvData
int AssignSpaceForData(int inumdata){
}
// free space for dCsvDate
void FreeCsvData(){
}
// read data from csv file
int ReadCsvData(char* csvFilePath)
{
}
// get csv data according to row(from 1 to giNumRow)
void GetCsvData(int irow, double* dAimPos){
}
By the way,刚开始是用二维数组动态开辟空间的,开辟和释放都很麻烦,如下
// assign space for gdCsvData
void AssignSpaceForData(int irow, int icolumn){
}
// free space for dCsvDate
void FreeSpaceOfData(int irow, int icolumn){
所以对于动态分配二维数组最好还是用一维数据加宏的方式代替。