我有一个格式的文件: 名字,中间名,姓氏,少校,市,州,GPA
我正在尝试读取文件并将没有逗号的数据输出到屏幕。这是我到目前为止所做的,但它只输出GPA:
#include <fstream>
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
int main(){
string fileline;
string word;
ifstream studentData;
studentData.open("studentData.csv");
while(studentData){
getline(studentData,fileline);
istringstream ss(fileline);
while(getline(ss, word,','));{
cout << word << '\n';
}
}
return(0);
}
答案 0 :(得分:1)
我认为问题在于这一行:
while(getline(ss, word,','));{
尝试删除分号。这将是正确的方式:
while(getline(ss, word,',')){
分号使循环无效,直到它读出最后一个单词(我猜是GPA),然后打印出来。
如果有效,请告诉我们!
答案 1 :(得分:0)
如果你只想复制没有逗号,为什么不用逗号复制?
ifstream studentData("StudentData.csv");
studentData >> noskipws;
std::remove_copy(std::istream_iterator<char>(studentData),
std::istream_iterator<char>(),
std::ostream_iterator(std::cout)
',');
OTOH,如果您输入的内容除了逗号之外没有任何分隔,那么这将产生输出,它们全部一起运行。您可能更喜欢在字段之间写出空格字符:
std::transform(std::istream_iterator<char>(studentData),
std::istream_iterator<char>(),
std::ostream_iterator<char>(std::cout),
[](char ch) { return ch == ',' ? ' ' : ch; });
通过这种方式,您仍然可以 来帮助跟踪一个字段的结束位置以及下一个字段的开始位置。当然,如果您更喜欢选项卡而不是空格,则可以将空格更改为选项卡。
答案 2 :(得分:0)
while(getline(ss, word, ',');
中的分号不应该存在。也就是说,字符串流很慢,我更喜欢这样做。
while(std::getline(studentData, fileline)) {
std::erase(std::remove(fileline.begin(), fileline.end(), ','), fileline.end());
std::cout << fileline << '\n';
}