2015-11-06 121 views
1

我的格式有一个文件: 名字,中间名,姓氏,少校,市,州,GPAC++读文件,忽略逗号和数据输出到屏幕

我想读该文件并将没有逗号的数据输出到屏幕上。这是我到目前为止,但只输出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

在'while'中使用'getline'。你做了第二次(虽然留了一个';'),但不是第一个循环。 –

回答

1

我认为这个问题是这一行:

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

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

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

分号,使循环做什么,直到它读取的最后一个字(我猜是GPA),然后您再进行打印。

让我们知道,如果这有效!

+0

这个技巧。目前它将自行打印出每个单词。我试图找出一旦我到达行尾时只打印到新行,所以它会打印7个字,然后开始一个新行。有小费吗? –

+0

是的。它正在打印新的一行,因为在cout结束时\ n。要用空格打印,你可以这样做: while(getline(ss,word,',')){0122} //打印一个空格而不是一个新行 } cout <<“\ n”; //然后打印行的末尾 –

+0

我想以与它开头相同的形式输出数据,只是没有逗号。如果我这样做,而不是'\ n',它会把它找到的每个单词放在一起。 (我应该提到输入文件有大约27行)。所以我想打印出7个单词,然后用新的线冲洗并重复 –

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; }); 

这样,你仍然有一些帮助追踪的其中一个领域的结束和下一个开始。当然,如果你喜欢,比如选项卡而不是空格,你可以将空间改为选项卡。

0

while(getline(ss, word, ',');中的分号不应该在那里。也就是说,stringstreams很慢,我宁愿这样做,如下所示。

while(std::getline(studentData, fileline)) { 
    std::erase(std::remove(fileline.begin(), fileline.end(), ','), fileline.end()); 
    std::cout << fileline << '\n'; 
}