2017-07-23 55 views
-1

C++中的新增功能和我试图复制在我打开一个.csv文件到我想要创建的另一个.csv文件后在控制台上读取的值。不幸的是,它只复制最后一个值,而不是整个。任何帮助?非常感谢!C++将控制台值复制到csv

int main() 
{ 
ifstream filetocopy("ecommerce.csv"); 
int d; 
while(filetocopy>>d){ 
cout << d << endl;} 

ofstream numbers("testing.csv"); 
     numbers << d << endl;  
} 

回答

0

这里有两个问题。

首先,您没有创建要输出的ofstream,直到您已经使用并丢弃了大部分数据。

其次,在while循环中,您所做的只是将数据写入标准输出而不是文件。

要纠正这个问题,您需要在while循环之前移动ofstream初始化,并将numbers << d << endl;移动到循环中。

+0

感谢答案。赞赏。是的,其实这就是我所做的。 – MGs

-2

想想你的ifstream就像一个旧的录像机磁带。当你用while循环打印字符时

while(filetocopy>>d){ 
cout << d << endl;} 

你的ifstream完成“玩”。每个循环都会获取磁带的新框架并将其打印出来。所以,磁头是最后,现在d只是举行信用的最后一帧。所以当你把它写入你的新csv时,这是它剩下的唯一值。

请不要先打印出所有这些值。

2

明显的问题与你的方法:

1)你读整个输入文件,这意味着你只写了最后一个值到输出文件后,您创建的输出文件。

2)即使你修正了1)你仍然会以错误的顺序将csv值写入输出文件。建议:逐行阅读 - >在控制台上打印行 - >将行写入文件。

这里有一个简单的解决问题的方法(只是举个例子,你可以改善它):

#include <iostream> 
#include <fstream> 
#include <string> 

int main() { 

    std::ifstream filetocopy("ecommerce.csv"); 
    std::ofstream numbers("testing.csv"); 
    std::string line; 

    while(std::getline(filetocopy, line)) { 
     std::cout << line << std::endl; 
     numbers << line << std::endl; 
    } 

    return 0; 
} 
+0

谢谢你的回答和“getline”提示!赞赏。 – MGs