下面的代码是从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;
}
}
答案 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)
你应该用','分隔每一行,然后忽略第一部分。
只需解析字符串以丰富第一个','字符,然后使用该索引中的子字符串结束。