如何跳过第一列在c ++中读取csv文件

时间:2018-03-20 19:48:13

标签: c++ csv

下面的代码是从csv文件中获取一些数据。但结果显示如下:

5,Jones,123-123-1234,BCBS,GP1234,39,Sarah,Broken Arm,3

6,Smith,123-231-1234,UHC,G1234,47,Francine,Physical Therapy,03/25/2015

9,Adams,123-123-4321,Cigna,U1234,28,Bob,Broken Arm,2

5,Van Gogh,123-321-1234,BCBS,GP1235,37,Andrea,Tummy Ache,3

10,Pewterschmidt,123-312-1234,UHC,G1112,42,Peter,监督正常第一次怀孕,2015年3月26日

但我想获取第一列以外的数据(例如5,6,9,5,10) 我怎样才能做到这一点?你能给我一个主意吗?感谢。

void Hospital::readRecordsFile()
{
    fileName = "Waterbury Hospital patients records.csv";
    ifstream file(fileName);
    string value;
    vector <string> getInform;
    while(file.good())
    {
        getline(file, value);
        getInform.push_back(value);
        //getInform.erase(getInform.begin()+1);
    }

    for(int i=0;i<getInform.size();i++)
    {
        cout << getInform[i] << endl;
    }

}

3 个答案:

答案 0 :(得分:1)

您可以在每一行中找到第一个分隔符(,),然后删除它之前的所有字符:

getline(file, value);
const auto pos = value.find(',');
if(pos != string::npos)
    value.erase(0, pos + 1);

如果您不确定CSV文件中使用过的分隔符(,)。您可能会忽略每行开头的所有数字:

getline(file, value);
const auto pos = value.find_first_not_of("0123456789");
if(pos != string::npos)
    value.erase(0, pos + 1);

答案 1 :(得分:1)

std::istream::ignore可用于忽略输入流中的某些文本。

  

从输入流中提取并丢弃字符,直到并包括delim

file.ignore(std::numeric_limits<std::streamsize>::max(), ',');

并使用getline跟进,以阅读该行的其余部分。

getline(file, value);

答案 2 :(得分:0)

你应该用','分隔每一行,然后忽略第一部分。

只需解析字符串以丰富第一个','字符,然后使用该索引中的子字符串结束。