C ++读取文件,忽略逗号并将数据输出到屏幕

时间:2015-11-06 00:38:43

标签: c++ getline sstream

我有一个格式的文件: 名字,中间名,姓氏,少校,市,州,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);
}

3 个答案:

答案 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';
}