c++读取csv文件


本文档程序给出VS2013如何读取csv文件的详细代码,通过动态分配数组实现
资源截图
代码片段和文件信息
#include “stdafx.h“
#include “readcsv.h“

#include 
#include 
#include 
#include 
using namespace std;

float* giCsvData;           //动态分配数据内存的指针     
int giNumData;            //读取的数据字节数
int giNumRow;             //每行的字节数
int giNumCol;             // 每列的字节数
//计算csv文件中的总行数
int GetTotalLineCount(FILE * fp)
{
int i = 0;
char strLine[MAX_LINE_SIZE];
fseek(fp 0 SEEK_SET);
while (fgets(strLine MAX_LINE_SIZE fp))
i++;
fseek(fp 0 SEEK_SET);
return i;
}
//计算csv文件中的总列数(以第一行的列数为基准)
int GetTotalColCount(FILE * fp)
{
int i = 0;
string number;
char strLine[MAX_LINE_SIZE];
fseek(fp 0 SEEK_SET);
if (fgets(strLine MAX_LINE_SIZE fp))
{
istringstream is(strLine);
while(std::getline(is number ‘‘))
{
i++;
}
//i=strlen(strLine)/2;   //因为csv文件以逗号‘‘作为分隔符,所以此处除以2
}
else
{
fseek(fp 0 SEEK_SET);
return -1;
}
fseek(fp 0 SEEK_SET);
return i;
}
// 通过指针*giCsvData给数据动态分配内存空间
int AssignSpaceForData(int inumdata){
giCsvData = NULL;
giCsvData = (float*)malloc(sizeof(float)*inumdata);    ///修改
if (giCsvData == NULL)
return 0;
memset(giCsvData 0 sizeof(float)*inumdata);
return 1;
}

// 释放动态数据内存
void FreeCsvData(){
free(giCsvData);
giCsvData = NULL;
}

// 从csv文件中读取数据
float ReadCsvData(char* csvFilePath)        //  /int 
{
FILE* fCsv;
char *ptr;
char strLine[MAX_LINE_SIZE];
int i;
int j;
// 已经有了数据,则先删除
if (giCsvData != NULL)
FreeCsvData();
// 打开文件
if (fopen_s(&fCsv csvFilePath “r“) != 0)
{
printf(“open file %s failed“ csvFilePath);
return -1;
}
else
{
// 确定动态数组的大小,然后开辟空间
 giNumRow = GetTotalLineCount(fCsv);
 giNumCol = GetTotalColCount(fCsv);
 giNumData = giNumRow*giNumCol;
AssignSpaceForData(giNumData);

// 读取数据
for (i = 0; i < giNumRow; i++)
{

j = 0;
if (fgets(strLine MAX_LINE_SIZE fCsv))
{
ptr = strtok(strLine ““);  //返回字符数组中字符‘’之前的字符,剩下的保留到静态数组中(此方法vs认为不安全)
//可以尝试使用strtok_s替换
while (ptr != NULL)
{
giCsvData[i*giNumCol + j] = atof(ptr);     //将字符转换为int类型数据并保存到动态数组中 //atoi(ptr); 
j++;
ptr = strtok(NULL ““);                //将从文件中读取的当前行剩余字符数组,读取字符‘’前面的字节
}
}
}
// 关闭文件
fclose(fCsv);
}
return 1;
}

//通过控制台显示读取的csv数据
void  ShowCsvData(float ddata[][3])
{
for (int i = 0; i < giNumRow; i++)
{
printf(“Line %d :“ i + 1);    //输出每行的行号 Line :
for (int j = 0; j {
//printf(“%.3f  “giCsvData[i*giNumCol+j]);  // 打印CSV数据
ddata[i][j] = giCsvData[i*giNumCol + j];
}
printf(“
“);                           //输出换行
}
FreeCsvData();
//return ddata;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-06-16 18:29  ReadCSVFile
     目录           0  2017-06-16 11:41  ReadCSVFileDebug
     文件       33280  2017-06-16 11:34  ReadCSVFileDebugReadCSVFile.exe
     目录           0  2017-06-16 17:41  ReadCSVFileReadCSVFile
     目录           0  2017-06-16 11:41  ReadCSVFileReadCSVFileDebug
     文件         937  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.Build.CppClean.log
     文件          50  2016-04-08 19:55  ReadCSVFileReadCSVFileDebugReadCSVFile.lastbuildstate
     文件        2738  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.log
     目录           0  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.tlog
     文件        3508  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.tlogCL.read.1.tlog
     文件        1412  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.tlogCL.write.1.tlog
     文件         176  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.tlogReadCSVFile.lastbuildstate
     文件        1342  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.tlogcl.command.1.tlog
     文件           2  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.tloglink.command.1.tlog
     文件           2  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.tloglink.read.1.tlog
     文件           2  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.tloglink.write.1.tlog
     文件           0  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugReadCSVFile.tlogunsuccessfulbuild
     文件        4670  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugmain.obj
     文件       12630  2017-06-16 11:41  ReadCSVFileReadCSVFileDebug
eadCSVFile.obj
     文件       44032  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugvc120.idb
     文件       77824  2017-06-16 11:41  ReadCSVFileReadCSVFileDebugvc120.pdb
     文件        7280  2017-06-16 17:15  ReadCSVFileReadCSVFileReadCSVFile.vcxproj
     文件        1157  2017-06-16 17:15  ReadCSVFileReadCSVFileReadCSVFile.vcxproj.filters
     文件         143  2016-04-08 19:16  ReadCSVFileReadCSVFileReadCSVFile.vcxproj.user
     文件      314029  2016-04-07 20:58  ReadCSVFileReadCSVFileTest.csv
     文件         612  2017-06-16 17:21  ReadCSVFileReadCSVFilemain.c
     文件        2679  2017-06-16 17:41  ReadCSVFileReadCSVFile
eadCSVFile.c
     文件         963  2017-06-16 16:52  ReadCSVFileReadCSVFile
eadCSVFile.h
     目录           0  2017-06-16 11:42  ReadCSVFileReadCSVFilex64
     目录           0  2017-06-16 16:55  ReadCSVFileReadCSVFilex64Debug
     文件         574  2017-06-16 16:55  ReadCSVFileReadCSVFilex64DebugReadCSVFile.Build.CppClean.log
............此处省略29个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)