C++实现读取CSV文件数据将进行计算。

  • 文件和流
    • 文件概述
    • 文件流类
  • 案例
  • 代码展示

文件和流

文件概述

文件是信息的集合,通常是指记录在外部存储介质(如磁盘等)上的信息集合。 文件在程序中为输入设备和输出设备承担着缓冲的功能,一般程序中,文件在程序的作用如图所示。

文件流类

在C++中有一个stream类,所有的输入/输出(I/O)都是以这个“流”类为基础的,类stream有两个重要的运算符。

  • 流输出运算符(<<):向流输出数据。
  • 流输入运算符(>>):向流输入数据。

文件流是I/O中是非常重要的一个内容,它的输入是指从磁盘文件流向内存,输出是指内存流向磁盘。C++中提供了三个文件流类:ofstream、ifstream、fstream,其中sftream是ofstream和ifstream多重继承的子类1。文件流类的关系如图所示。

案例

自定义CSV文件,内容有No、Chinese、English、Math,总共50条数据,前22条数据如图所示。
实现功能:

  1. 统计各科目平均分并显示;
  2. 按三门成绩总分排名并显示编号、总分;
  3. 筛选有不及格科目的编号记录,并将该行记录写入2.CSV

读取CSV文件,使用ifstream输入流类中infile读取文件数据。

 ifstream infile("D:/CProject/1.csv", ios::in);string line;vector<struct Studet> studentVector;getline(infile, line);while (getline(infile, line)) {stringstream ss(line);string str;Studet studet;getline(ss, str, ',');studet.id = stod(str);getline(ss, str, ',');studet.chinese = stold(str);getline(ss, str, ',');studet.english = stold(str);getline(ss, str, ',');studet.math = stold(str);studentVector.push_back(studet);}

统计各科目平均分并显示,遍历student结构体的数据大小,获取Chinese、English、Math总数的和并计算平均数。

 chineseAvg = chineseSum / studentVector.size();englishAvg = englishSum / studentVector.size();mathAvg = chineseSum / studentVector.size();cout << "统计各科目平均分并显示:" << endl;cout << "语文平均分:" << chineseAvg << "\n英语平均分:" << englishAvg << "\n数学平均分:" << mathAvg << endl;cout << endl;

根据Chinese、English、Math三门成绩总分排名并显示编号、总分。

 int temp;for (int i = 0; i < studentVector.size() - 1; i++) {for (int j = 0; j < studentVector.size() - i - 1; j++) {if (studentVector[j].total < studentVector[j + 1].total) {temp = studentVector[j].total;studentVector[j].total = studentVector[j + 1].total;studentVector[j + 1].total = temp;}}}cout << "打印排序:" << endl;for (int i =0; i < studentVector.size(); i++) {cout << "编号:" << studentVector[i].id << "\t总分:" << studentVector[i].total << endl;}cout << endl;

筛选有不及格科目的编号记录,并将该行记录写入2.CSV。使用ofstream 输出流类中open创建文件并写入数据。

 ofstream outFile;outFile.open("D:/CProject/2.csv", ios::out);outFile << "id" << endl;for (int i = 0; i < studentVector.size(); i++) {bool isFailed = studentVector[i].isFailed;if (isFailed) {outFile << studentVector[i].id << endl;}}outFile.close();

代码展示

#include <iostream>
#include <string>
#include <fstream>
#include <iostream>
#include <sstream>
#include <vector>
#include <cstring>
#include <algorithm>using namespace std;struct Studet{int id;double chinese;double english;double math;double total;int avg;bool isFailed=true;//判断科目及格标志
};int main() {int chineseSum = 0;int englishSum = 0;int mathSum = 0;int chineseAvg = 0;int englishAvg = 0;int mathAvg = 0;/*读入1.CSV文件*/ifstream infile("D:/CProject/1.csv", ios::in);string line;vector<struct Studet> studentVector;getline(infile, line);while (getline(infile, line)) {stringstream ss(line);string str;Studet studet;getline(ss, str, ',');studet.id = stod(str);getline(ss, str, ',');studet.chinese = stold(str);getline(ss, str, ',');studet.english = stold(str);getline(ss, str, ',');studet.math = stold(str);studentVector.push_back(studet);}//数据赋值for (int i = 0; i < studentVector.size(); i++) {double sum = studentVector[i].chinese + studentVector[i].english + studentVector[i].math;studentVector[i].total = sum;studentVector[i].avg = sum / 3;chineseSum += studentVector[i].chinese;englishSum += studentVector[i].english;mathSum += studentVector[i].math;//判断科目if (studentVector[i].chinese < 60 || studentVector[i].english < 60 || studentVector[i].math < 60) {studentVector[i].isFailed = true;}else {studentVector[i].isFailed = false;}}/*2.统计各科目平均分并显示 */chineseAvg = chineseSum / studentVector.size();englishAvg = englishSum / studentVector.size();mathAvg = chineseSum / studentVector.size();cout << "统计各科目平均分并显示:" << endl;cout << "语文平均分:" << chineseAvg << "\n英语平均分:" << englishAvg << "\n数学平均分:" << mathAvg << endl;cout << endl;/*3.按三门成绩总分排名并显示 编号, 总分*/int temp;for (int i = 0; i < studentVector.size() - 1; i++) {for (int j = 0; j < studentVector.size() - i - 1; j++) {if (studentVector[j].total < studentVector[j + 1].total) {temp = studentVector[j].total;studentVector[j].total = studentVector[j + 1].total;studentVector[j + 1].total = temp;}}}cout << "打印排序:" << endl;for (int i =0; i < studentVector.size(); i++) {cout << "编号:" << studentVector[i].id << "\t总分:" << studentVector[i].total << endl;}cout << endl;/*4.创建2.CSV文件,筛选有不及格科目的编号记录,并将该行记录写入2.CSV*/ofstream outFile;outFile.open("D:/CProject/2.csv", ios::out);outFile << "id" << endl;for (int i = 0; i < studentVector.size(); i++) {bool isFailed = studentVector[i].isFailed;if (isFailed) {outFile << studentVector[i].id << endl;}}outFile.close();system("pause");
}

  1. 在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以要用这种方式操作文件,就必须加入头文件fstream.h。 ↩︎

C++实现读取CSV文件数据将进行计算。相关推荐

  1. python读取csv某一列存入数组_python 读取.csv文件数据到数组(矩阵)的实例讲解

    利用numpy库 (缺点:有缺失值就无法读取) 读: import numpy my_matrix = numpy.loadtxt(open("1.csv","rb&qu ...

  2. java读取csv文件的行数_JMeter 读取 CSV 文件数据行数

    在用 JMeter 做测试时,经常需要调用外部 CSV 文件的数据到脚本中使用,如果我们想对 CSV 文件中数据的行数进行统计,这个怎么做呢? 针对上面表格的数据,我们一起来学习一下如何统计数据行数吧 ...

  3. python pandas读取csv_pandas读取csv文件数据的方法及注意点

    pandas是一个高效的数据分析工具.基于其高度抽象的数据结构DataFrame(点击这里了解DataFrame数据结构),几乎可以对数据进行任何你想要的操作. 由于现实世界中数据源的格式非常多,pa ...

  4. python csv数据处理生成图_Python 读取CSV文件数据并生成可视化图形

    CSV 文件数据读取并生成图形 CSV 文件格式 在文本文件中存储数据,最简单的方式就是将数据按照一定的格式存放在文件中,在读取文件时根据设计好的格式去将对应数据读取出来,这样就能很方便的进行简单数据 ...

  5. matlab 和python读取csv文件速度_matlab读取csv文件数据并绘图

    circle.m(画二维圆的函数) %该函数是画二维圆圈,输入圆心坐标和半径 %rectangle()函数参数'linewidth'修饰曲线的宽度 %'edgecolor','r',edgecolor ...

  6. Java通过javacsv实现读取csv文件数据

    目录 1.添加依赖 2.测试的csv文件 3.实际调用代码 4.返回的数据格式 1.添加依赖 <!--csv文件操作--> <dependency><groupId> ...

  7. 使用python pandas读取csv文件数据

    csv是我接触的比较早的一种文件,比较好的是这种文件既能够以电子表格的形式查看又能够以文本的形式查看.最早接触是在别人的Perl脚本中,或许是为了充分利用Perl的文本处理能力.不过,日常的生活工作中 ...

  8. mac读取csv文件数据,采用逗号分隔

    windows 默认是逗号分隔 mac 默认是空格或者分号 想要将mac读取csv采用逗号分隔: 首先mac打开excel,在excel中导入要读取的csv文件 文件格式选择:utf-8,再点击下一步 ...

  9. C++读取csv文件

    初学C++,尝试实现惯性导航+零速修正+卡尔曼滤波 第一步,读取csv中的传感器数据 此处用到C++文件的输入输出控制知识 首先定义声明一个ifstream对象,与文件名关联.ps:关联后相当于找到了 ...

最新文章

  1. nginx负载均衡以及反向代理
  2. RAID2.0核心思想:数据保护与物理资源管理域分离
  3. 三种常见中文内码的转换方法
  4. 路由到另外一个页面_一个简单的Vue按钮级权限方案
  5. C#版二维码生成器附皮肤下载
  6. More Effective C++ (运算符)
  7. CSDN挑战编程——《绝对值最小》
  8. 学习笔记-JMeter 进行接口压力测试
  9. qq批量登录软件_把微信PC版越甩越远!QQ电脑版这些新功能太良心
  10. Java并发之线程池ThreadPoolExecutor源码分析学习
  11. qudp socket信号不触发_QT下udpsocket一段时间接收不到数据的问题
  12. WinRAR和WinZIP 密码找回
  13. 常用xshell5命令
  14. 提升计算机科学素养,中职学生计算机科学与技术专业素养提升策略
  15. HDFS操作及命令介绍
  16. 玩抖音必知的3个数据分析工具:会用它们,少走很多弯路
  17. 金蝶KIS标准版会计期间超过三期。。。
  18. 对WEB安全工程师的理解
  19. 2021综述:一般目标检测中的遮挡处理
  20. 2021年安徽高考成绩排名查询,安徽高考排名对应大学-安徽高考位次查询(2021年文科参考)...

热门文章

  1. Python刷leetcode 102. 二叉树的层次遍历
  2. Python 遍历List 方式总结
  3. 汉王科技牵手中科红旗 手写输入实现“大满贯”
  4. IIC、SPI、USB驱动架构类比
  5. 招商银行个人银行专业版最新 6.0.4.5 版 已经发布
  6. java潜艇大战游戏源码项目
  7. 955 不加班的公司名单!2021 年4月最新版!
  8. php获取酷狗mv播放链接,酷狗歌单获取歌曲信息的接口源码
  9. ios支持video标签吗_video标签移动端兼容性问题总结
  10. 0ctf freenote