• 大小: 11.3MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-07-29
  • 语言: C/C++
  • 标签: c++  

资源简介

本文档程序给出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\link.command.1.tlog
     文件           2  2017-06-16 11:41  ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\link.read.1.tlog
     文件           2  2017-06-16 11:41  ReadCSVFile\ReadCSVFile\Debug\ReadCSVFile.tlog\link.write.1.tlog
     文件           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个文件信息

评论

共有 条评论