1

我有一个格式为:FirstName,MiddleName,LastName,Major,City,State,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);
}
4

3 回答 3

1

我认为问题在于这一行:

while(getline(ss, word,','));{

尝试删除分号。这将是正确的方法:

while(getline(ss, word,',')){

分号使循环什么也不做,直到它读取最后一个单词(我猜是 GPA),然后打印出来。

让我们知道这是否有效!

于 2015-11-06T00:42:34.083 回答
0

中的分号while(getline(ss, word, ',');不应该在那里。也就是说,字符串流很慢,我更喜欢按如下方式进行。

while(std::getline(studentData, fileline)) {
    std::erase(std::remove(fileline.begin(), fileline.end(), ','), fileline.end());
    std::cout << fileline << '\n';
}
于 2015-11-06T00:48:15.707 回答
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; });

这样,您仍然可以帮助跟踪一个字段的结束位置和下一个字段的开始位置。当然,如果您更喜欢制表符而不是空格,您可以将空格更改为制表符。

于 2015-11-06T00:44:41.047 回答