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 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?