资源简介
本文档程序给出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(“\n“); //输出换行
}
FreeCsvData();
//return ddata;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-06-16 18:29 ReadCSVFile\
目录 0 2017-06-16 11:41 ReadCSVFile\Debug\
文件 33280 2017-06-16 11:34 ReadCSVFile\Debug\ReadCSVFile.exe
目录 0 2017-06-16 17:41 ReadCSVFile\ReadCSVFile\
目录 0 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\
文件 937 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.Build.CppClean.log
文件 50 2016-04-08 19:55 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.lastbuildstate
文件 2738 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.log
目录 0 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\
文件 3508 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\CL.read.1.tlog
文件 1412 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\CL.write.1.tlog
文件 176 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\ReadCSVFile.lastbuildstate
文件 1342 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\cl.command.1.tlog
文件 2 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\li
文件 2 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\li
文件 2 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\li
文件 0 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\unsuccessfulbuild
文件 4670 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\main.obj
文件 12630 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\readCSVFile.obj
文件 44032 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\vc120.idb
文件 77824 2017-06-16 11:41 ReadCSVFile\ReadCSVFile\Debug\vc120.pdb
文件 7280 2017-06-16 17:15 ReadCSVFile\ReadCSVFile\ReadCSVFile.vcxproj
文件 1157 2017-06-16 17:15 ReadCSVFile\ReadCSVFile\ReadCSVFile.vcxproj.filters
文件 143 2016-04-08 19:16 ReadCSVFile\ReadCSVFile\ReadCSVFile.vcxproj.user
文件 314029 2016-04-07 20:58 ReadCSVFile\ReadCSVFile\Test.csv
文件 612 2017-06-16 17:21 ReadCSVFile\ReadCSVFile\main.c
文件 2679 2017-06-16 17:41 ReadCSVFile\ReadCSVFile\readCSVFile.c
文件 963 2017-06-16 16:52 ReadCSVFile\ReadCSVFile\readCSVFile.h
目录 0 2017-06-16 11:42 ReadCSVFile\ReadCSVFile\x64\
目录 0 2017-06-16 16:55 ReadCSVFile\ReadCSVFile\x64\Debug\
文件 574 2017-06-16 16:55 ReadCSVFile\ReadCSVFile\x64\Debug\ReadCSVFile.Build.CppClean.log
............此处省略29个文件信息
- 上一篇:车流量统计
- 下一篇:ATM页面程序MFC对话框
相关资源
- 《Visual+C%2B%2B+6.0+时尚编程百例》100个
- 用VC++编写的一个动态效果的简单动画
- P2P网络技术原理与C++开发案例pdf版
-
Unreal Engine 4 sc
ripting with C++ Cookbook - C++多路视频传输
- C++ 设备管理系统
- 一个基于C++的简单银行存取管理系统
- Windows版微信打飞机游戏C++
- VC++ 读图 分类 变化监测 几何校正
- 2048游戏C++实现
- Visual C++ 6.0编程与技巧.pdf
- 仓库管理系统C++版
- C++进行http请求,并获取返回结果
- 病毒Phatbot的C++源代码
- Algorithms in C++ Parts 1-4(英文版)Robe
- 俄罗斯方块游戏设计C++课程设计报告
- 组态王modbus协议驱动vc++
- 数据结构(C++语言版)习题解析-邓俊
- Qt版黑白棋251471
- VC++ SerialPort类 串口调试程序vs2013工程
- C++程序设计谭浩强带书签版完整懂的
- MFC北京公交车查询系统C/C++
- 商品销售管理系统源码和附加数据库
- c++基于Windows编程的打飞机小游戏源代
- MFC局域网聊天室可屏蔽、可私聊C++ 客
- C++程序设计历年真题复习资料 04737
- marching_cubes算法C++
- 亲测VC++ 编程助手 Vissual AssistX (VS
- Visual C++ 从入门到精通 配套光盘 源码
- C/C++图像处理编程
评论
共有 条评论