c++读取csv文件
本文档程序给出VS2013如何读取csv文件的详细代码,通过动态分配数组实现
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 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个文件信息
#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.tlogli
文件 2 2017-06-16 11:41 ReadCSVFileReadCSVFileDebugReadCSVFile.tlogli
文件 2 2017-06-16 11:41 ReadCSVFileReadCSVFileDebugReadCSVFile.tlogli
文件 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个文件信息
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)