1. 功能:

    1. 读取、解析csv文件的内容,再打印出每一个联系人的数据;
    2. 能够根据客户输入的属性KEY,来实现以KEY为依据来排序,并将排序结果打印出来;
    3. 能够对错误格式的文件进行检测;
  2. 数据流:
    1. 首先引用#include<fstream>,包含:ofstream,ifstream,fstream
    2. 新建一个csv文件(也可以由ofstream生成),可以手动输入数据也可以通过ofstream类来实现打开和往csv文件写入数据;由于.csv文件是以‘,’为分隔符的,在每次读取到’,’截止,注意是英文的’,’不是中文字符的;
    3. 读取.csv文件,使用ifstream进行读取。
  3. 设计
    1. 创建描述客户信息的结构体Client
    2. 每次获取整行数据,并且通过’,’为分界来获取每个部分的数据,同时赋值到客户结构体实例client的对应成员,然后将这个实例push到vectorClient;
    3. 通过写sort()的比较函数compId、compAge来实现sort根据客户的id、age排序。
    4. 判断打开文件是否为.csv文件,则是通过判断文件的后缀是否符合要求来实现。
  4. 小点

ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间。

在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的

ios::in:   文件以输入方式打开(文件数据输入到内存)

ios::out: 文件以输出方式打开(内存数据输出到文件)

输入时以整行字符串加上换行符号endl一次写入。

输出一个换行符并刷新此流 输出

#include <iostream>#include <fstream> //定义读写已命名文件的类型
#include <vector>#include <sstream> //多定义的类型则用于读写存储在内存中的string对象//atoi()
#include <stdlib.h>
#include <stdio.h>
#include <string.h>//strrchr用到
#include<string>
#include<algorithm>using namespace std;struct Client{int id;string name;int age;string hobby;
}; //ID排序函数:bool compId(const Client &a, const Client &b){if (a.id < b.id)return true;else                ///这里超级重要!!!return false;
}
//age排序函数:
bool compAge(const Client &a, const Client &b){if (a.age < b.age)return true;else                ///这里超级重要!!!return false;
}  int main(){//写文件ofstream outFile("F:\\学习提升\\c++\\Test\\data1.csv",ios::out); //输出文件流(输出到文件)outFile<<"id"<<","<<"name"<<","<<"age"<<","<<"hobby"<<endl;outFile<<"2"<<","<<"Lilei"<<","<<14<<","<<"music"<<endl;outFile<<"5"<<","<<"Katherine"<<","<<36<<","<<"football"<<endl;outFile<<"1"<<","<<"Bob"<<","<<18<<","<<"pingpong"<<endl;outFile<<"4"<<","<<"Tom"<<","<<20<<","<<"basketball"<<endl;outFile<<"3"<<","<<"Jerry"<<","<<56<<","<<"computer"<<endl;outFile<<"6"<<","<<"ketty"<<","<<25<<","<<"run"<<endl;const char str[] = "data1.csv";const char ch = '.';//通过文件名后缀判断文件类型()string str1;str1 = strrchr(str, ch);//截取 .及之后的内容cout << "----判断是不是CSV类型文件----" << endl; if(str1 == ".csv")cout<< "    该文件是CSV类型文件" << endl;else cout<< "!!!请确认输入的文件类型" << endl;//读文件  ifstream inFile("F:\\学习提升\\c++\\Test\\data1.csv",ios::in);//inFile来自fstream,ifstream为输入文件流(从文件读入)string lineStr;vector<Client> vectorClient;int num = 0; while(getline(inFile,lineStr)) //getline来自sstream      //读入整行数据到Linestr里{stringstream ss(lineStr);//来自sstreamstring str;if(num > 0){    //实现只对数据写入vector ,不对标题写入,从而进行排序 //按照逗号分隔Client client;int n1 = 1;while(getline(ss,str,',')){//cout<<str<<endl;switch(n1){case 1: client.id = atoi(str.c_str());break;case 2: client.name = str;break;case 3: client.age = atoi(str.c_str());break;case 4: client.hobby = str;break;}n1++;}vectorClient.push_back(client);//每一行vector数据都放到strArray中去}num++;}//未排序 cout << "————未排序————" << endl;//输出结果for (vector<Client>::iterator it = vectorClient.begin(); it != vectorClient.end(); it++){cout << "id: " << it->id << " name: " << it->name << " age: " << it->age << " hobby: " << it->hobby << endl;}//输入KEYcout << "请输入排序的KEY" <<endl;cout << "可输入id,age两种排序选择,输入exit推出" <<endl;string key;cin >> key;int flag = 1;//默认按照id排序if(key == "age"){flag = 2;}else if(key == "exit"){cout << "不排序,即将退出" <<endl;getchar();//(防止程序一闪而过)return 0;}cout << "————排序后————" << endl; switch(flag){case 1:sort(vectorClient.begin(), vectorClient.end(), compId);cout << "根据 ID 排序" << endl; break;case 2:sort(vectorClient.begin(), vectorClient.end(), compAge);cout << "根据 年龄 排序" << endl; break;}//排序后  输出结果for (vector<Client>::iterator it = vectorClient.begin(); it != vectorClient.end(); it++){cout << "id: " << it->id << " name: " << it->name << " age: " << it->age << " hobby: " << it->hobby << endl;}getchar();//(防止程序一闪而过)return 0;}

C++读取和写入CSV文件,实现判断文件格式,并且特定的排序输出的实例相关推荐

  1. python输出csv文件-Python之读取与写入CSV文件

    原标题:Python之读取与写入CSV文件 本文作者:闫续文 文字编辑:张梦婷 技术总编:张学人 有问题,不要怕!访问 CSV(Comma-Separated Values)格式是电子表格和数据库最常 ...

  2. csv文件python是怎么输入的,python怎么读取和写入csv文件

    Python读取与写入CSV文件需要导入Python自带的CSV模块,然后通过CSV模块中的函数csv.reader()与csv.writer()来进行CSV文件的读取与写入. 写入CSV文件impo ...

  3. pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Python中读写CSV文件.有几种不同的方法,例如,您可以使用Py ...

  4. [转载] pythonpandas读取csv文件最后一行_简单小案例(一):使用Pandas在Python中读取和写入CSV文件...

    参考链接: 使用Pandas在Python中读写CSV文件 前期文章链接: YOLOv3论文 https://arxiv.org/pdf/1804.02767.pdf 正文: 有许多方法可以在Pyth ...

  5. 使用CsvReader读取和写入csv文件

    使用CsvReader读取和写入csv文件的简单操作Demo: import com.csvreader.CsvReader; import com.csvreader.CsvWriter;impor ...

  6. csv java web 导入_DAY5-step9 使用CSV模块和Pandas在Python中读取和写入CSV文件

    什么是CSV文件? CSV文件是一种纯文本文件,其使用特定的结构来排列表格数据. CSV是一种紧凑,简单且通用的数据交换通用格式. 许多在线服务允许其用户将网站中的表格数据导出到CSV文件中. CSV ...

  7. 用python的pandas打开csv文件_使用CSV模块和Pandas在Python中读取和写入CSV文件

    什么是CSV文件? CSV文件是一种纯文本文件,其使用特定的结构来排列表格数据.CSV是一种紧凑,简单且通用的数据交换通用格式.许多在线服务允许其用户将网站中的表格数据导出到CSV文件中.CSV文件将 ...

  8. 用pycham读取和写入csv文件

    读取csv文件: #读取csv文件 import csv with open("ceshi.csv",mode="r",encoding="utf-8 ...

  9. C#按Excel 规则读取、写入CSV文件,放入DataTable,再读取、写入dataGridView内。包含解析转义字符,首行判断,转换完成信号等。

    CSV文件有很多规则,主要是处理逗号(,)和双引号(")的方法不同,这里按Excel 规则解析转义字符.主要规则为: 1.有逗号(,)或开头为双引号(")的字符串在保存时前后加双引 ...

最新文章

  1. Python执行系统命令的四种方法
  2. Android的服务(Service)(二)Service的自动重启问题
  3. 人人都是程序员的节奏,Python 纳入高考
  4. 后面第一个大于(51Nod-2500)
  5. python3数据类型_python3中到底有几类数据类型?
  6. SAP License:企业如何做成本分析
  7. 华为最新全系列交换机命令手册、配置指南下载
  8. 关于GIT的万年坑你还在踩吗?答应我别傻了
  9. 项目搭建 windows_08. SpringCloud实战项目-配置Git
  10. 【紫书第五章】String、结构体、部分STL的常见用法
  11. IDEA+Java控制台实现教材管理系统
  12. MFC定时器SetTimer函数用法总结
  13. 计算机课签到本,大学课堂点名技术日新月异:电脑摇号扫码上课
  14. VTN:视频Transformer网络
  15. html设置只在最后一页显示页脚,在Word里怎么设置页脚只在最后一页显示?
  16. Redis五大数据类型常用命令与使用场景总结
  17. NFS 服务 lap1+lap2+mysql+nfs
  18. 图欧学习资源库 https://tuostudy.com/
  19. WY的Java学习笔记(1)基础
  20. 升级Win11必备:如何开启TPM2.0

热门文章

  1. R语言统计入门第六章——回归与相关性
  2. 最新Kafka教程(包含kafka部署与基本操作、java连接kafka、spring连接kafka以及使用springboot)
  3. 为什么企业需要两化融合管理体系?
  4. 解决zabbix页connot connect to database;MariaDB 导入数据时 ERROR 1118 (42000) at line 1278: Row size too larg
  5. 汇编语言与微机原理(1)基础知识
  6. python股票相关性分析_python处理时间序列数据股票数据,并进行相关性分析
  7. OpenAI完胜DOTA世界冠军,20行python代码带你领略其魅力
  8. JWT详细讲解(保姆级教程)
  9. 5.5G产业再提速!高通5GAdvanced-ready芯片商用终端下半年面世
  10. 半入耳蓝牙耳机评测,南卡和锤子真无线蓝牙耳机哪个更值得入手?