kk_qwaz 2017-08-01 05:21 采纳率: 50%
浏览 1023
已采纳

c++ 用 list 或者 map 对 csv文件进行删减

把csv文件中 空格 和出错信息“#N/A”整行信息删除
最终只保留 StuNum(学号)、class(班级)、Dorm(宿舍)三列(删除其他三列)
部分内容如下:
图片说明

结果如图
图片说明

 struct TcsvMake
{
    int id;
    string Name;
    int StuNum;
    int class;
    int Dorm;
    int Age;
};
typedef list<TcsvMake> LISTcsvMake;

请大神指点

  • 写回答

3条回答 默认 最新

  • kk216927 2017-08-14 08:51
    关注
     // CFileRead.h
    #include <iostream>
    #include <fstream>
    #include <sstream>
    #include <algorithm>
    #include <cstring>
    #include <list>
    using namespace std;
    
    struct TcsvMake
    {
        int id;
        string Name;
        int StuNum;
        int class;
        int Dorm;
        int Age;
    };
    typedef list<TcsvMake> LISTcsvMake;
    
    class CFileRead
    {
    
    public:
        void readCSV(ifstream &input);
        LISTcsvMake m_csvMakeList;
    
    };
    
    
     //CFileRead.cpp
    #include<iostream>
    #include <list>
    #include"CFileRead.h" 
    
    #include "string.h"
    #pragma warning(disable:4996)
    using namespace std;
    
    void CFileRead::readCSV(ifstream &input)
    {
    
        string csvLine;// 从输入流中读取每一行
        getline(input, csvLine);
        while (getline(input, csvLine))
        {
            TcsvMake tcsv;
            char *csv = (char*)csvLine.data();
    
            if (NULL != csv)
            {
                string id = strtok(csv, ",");
                istringstream csvStream(id);
                csvStream >> tcsv.id;
    
                string name = strtok(NULL, ",");
                istringstream CsvStream(name);
                CsvStream >> tcsv.Name;
    
                string stuNum = strtok(NULL, ",");
                istringstream cSvStream(stuNum);
                cSvStream >> tcsv.StuNum;
    
                string class = strtok(NULL, ",");
                istringstream csVStream(class);
                csVStream >> tcsv.class;
    
                string dorm = strtok(NULL, ",");
                istringstream CSvStream(dorm);
                CSvStream >> tcsv.Dorm;
    
                string age = strtok(NULL, ",");
                istringstream CSVStream(age);
                CSVStream >> tcsv.Age;
    
                m_csvMakeList.push_back(tcsv);
            }
        }   
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值