#include<iostream>#include<fstream>#include<sstream>#include<vector>#include<string>#include<set>using namespace std;//int count = 0;//22001010315-思俊宇class CsvParser{public:set<vector<string>> originalData;//vector<vector<string>> v_originalData;vector<vector<string>> verifyData;set<vector<string>> errorMessages;int originalData_ifCheck = 0;//读待检查的文件bool ReadCsvFile(const string path, vector<vector<string>>& dataType){fstream file(path,ios::in);if (!file.is_open()){cerr << "Error opening file!" << endl;return 1;}string line;while (getline(file, line)) {istringstream iss(line);vector<string> row;string token;while (getline(iss, token, ','))row.push_back(token);dataType.push_back(row);}file.close();return 0;}//读正确的文件bool ReadCsvFile(const string path, set<vector<string>>& dataType){//ReadCsvFile("D:\\C++P\\Ele\3円level\\data\\data_for_check.csv",v_originalData);fstream file(path,ios::in);if (!file.is_open()){cerr << "Error opening file!" << endl;return 1;}string line;while (getline(file, line)) {istringstream iss(line);vector<string> row;string token;while (getline(iss, token, ','))row.push_back(token);dataType.emplace(row);}//22001010315-思俊宇file.close();return 0;}//检查重复信息void CheckDuplicateRows(vector<vector<string>>& Cek){set<vector<string>> seenRows;size_t i = 0;for (const auto& row : Cek) {if (!seenRows.insert(row).second) {cout << "第" << i + 1 << "行与之前的某行重复:" << endl;for (size_t j = 0; j < row.size(); ++j) {cout << row[j] << ' ';}cout << endl;}++i;}//22001010315-思俊宇}//检查缺失信息并输出正确信息void CheckMissing_Fix(vector<vector<string>>& Cek){set<vector<string>> seenRows;// 遍历 Cek,插入到 seenRows 中for (const auto& row : Cek) {seenRows.insert(row);}// 遍历 originalData,查找缺失和错误的信息并输出正确信息size_t j = 0;for (auto it = originalData.begin(); it != originalData.end(); ++it) {// 使用迭代器进行遍历auto Crow = it;if (seenRows.find(*Crow) == seenRows.end() && errorMessages.find(*Crow) == errorMessages.end()) {cout << "第" << j + 1 << "行";cout << "正确内容为: " << endl;for (size_t k = 0; k < Crow->size(); ++k) {cout << (*Crow)[k] << ' ';}cout << endl;}//22001010315-思俊宇++j;}}//检查信息错误void CheckWrong(set<vector<string>>& Org, vector<vector<string>>& Cek){size_t i = 0;for (const auto& row : Cek) {auto it = Org.find(row);if (it == Org.end()) {cout << "第" << i + 1 << "行信息有误: " << endl;for (size_t j = 0; j < row.size(); ++j) {cout << row[j] << ' ';}//PrintFix(count);errorMessages.emplace(row);cout << endl;}//22001010315-思俊宇++i;}}};int main(){ //22001010315-思俊宇CsvParser cp;cp.ReadCsvFile("D:\\C++P\\Ele\\3level\\data\\original_data.csv",cp.originalData);cp.ReadCsvFile("D:\\C++P\\Ele\\3level\\data\\data_for_check.csv",cp.verifyData);cp.CheckDuplicateRows(cp.verifyData);cp.CheckWrong(cp.originalData,cp.verifyData);cp.CheckMissing_Fix(cp.verifyData);// for(auto it : cp.v_originalData)// {// for(auto itn : it)// {// cout << itn << ' ';// }// cout << endl;// }return 0;// void PrintFix(int cnt)// {// int row = 1;// auto itj =v_originalData.begin();// for(auto iti=verifyData.begin();iti!=verifyData.end();iti++) {// if(*iti != *itj && cnt == 0) {// ++iti;// ++cnt;// }// else if(*iti == *itj && cnt == 1) {// for(auto it : *itj){// cout << it << ' ';// }// cout << endl;// ++itj;// ++cnt;// }// else if(*iti != *itj && cnt == 2) {// for(auto it : *itj){// cout << it << ' ';// }// cout << endl;// ++cnt;// }// else if(*iti != *itj && cnt == 3) {// for(auto it : *itj){// cout << it << ' ';// }// cout << endl;// ++cnt;// }// else if(*iti != *itj && cnt == 4) {// cout << "第" << row << "行缺失: " << endl;// cout << "内容为: " << endl;// for(auto it : *itj){// cout << it << ' ';// }// cout << endl;// ++cnt;// }// ++itj;// ++row;// }// }}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。