c ++ how-to:从.txt或.csv文件中导入数字变量

时间:2013-07-15 13:57:11

标签: c++ variables csv assign

仍然是C ++的初学者,我无法弄清楚如何使用fstream。 我想在我的程序中为一组double变量赋值 .txt.csv文件(.csv可能因实际原因而更好。)

假设我的input_file.csv看起来像这样:

10
0
20
0.4
0.1333382222
0
0.5
10
20
0.76
0.3
0.1
0.2

这些值应该在我的代码中分配给以下变量(首先声明等于0):

/// geometry
double Dist=0; ///Distance between the 2

double PosAi = 0;
double PosAo = 0;
double PosBi = 0;
double PosBo = 0; ///positions i/o

/// densities

double iDA=0;
double oDA=0;
double iDAtop=0;
double oDAtop=0; /// Left

double iDB=0;
double oDB=0;
double iDBtop=0;
double oDBtop=0; /// Right

我想阅读input_file.csv的值并将它们分配给我的变量,这样如果我输入:

cout<<Dist<<" "<<PosAi<<" "<<PosAo<<" "<<

...........等。 ;

我在控制台上获得以下列表:

10 0 20 0.4 0.1333382222 0 0.5 10 20 0.76 0.3 0.1 0.2

但是我不知道如何使用fsteam,你能帮忙吗? 谢谢!


好的,这就是答案,如果像我这样的初学者遇到同样的问题:

#include <iostream>
#include <fstream>
using namespace std;

/// geometry

double Dist=0; ///Distance between the 2
double PosAi = 0;
double PosAo = 0;
double PosBi = 0;
double PosBo = 0; ///positions i/o

/// densities

double iDA=0;
double oDA=0;
double iDAtop=0;
double oDAtop=0; /// Left
double iDB=0;
double oDB=0;
double iDBtop=0;
double oDBtop=0; /// Right

int main()
{
ifstream ifs ("input.csv");
if (!ifs)
    // process error
ifs >> Dist;
ifs >> PosAi;
ifs >> PosAo;
ifs >> PosBi;
ifs >> PosBo;
ifs >> iDA;
ifs >> oDA;
ifs >> iDAtop;
ifs >> oDAtop;
ifs >> iDB;
ifs >> oDB;
ifs >> iDBtop;
ifs >> oDBtop;

    // print variables

    cout << Dist << " " << PosAi << " " << PosAo << " " << PosBi << " " << PosBo << " " << iDA << " " << oDA << " " << iDAtop << " " << oDAtop << " " << iDB << " " << oDB << " " << iDBtop << " " << oDBtop << endl;
}

由于

3 个答案:

答案 0 :(得分:1)

ifstream ifs ("input_file.txt");
if (!ifs)
    // process error
ifs >> DISTAB;
ifs >> POSAstart;
....

答案 1 :(得分:1)

如果您知道如何使用cout打印一堆变量,您知道如何使用输入流读取它们 - 它恰恰相反。只需反转cout来电的箭头:

myInputFile >> Dist >> PosAi >> PosAo >> ...;

请注意,输入流只能将实际变量作为>>的参数,而输出流可以采用临时值,就像使用<< " "打印空间一样。但幸运的是,输入流会自动占用空白,因此您可以忽略它。因此,我在前一行中的示例是正确的。

此外,cout预先声明iostream,但您需要声明输入流。 ifstream将文件的名称作为其第一个参数读取:

ifstream myInputFile ("input_file.csv");

答案 2 :(得分:1)

首先,你没有(通常)使用fstream ifstream。而且你通常不直接访问它,但是 通过istream&;就像ofstream派生一样 ostream, ifstream derives from istream , so that you can use istream&amp;`独立于流的类型。

最后,<<上的每个ostream运算符都有。{ >>上的相应istream运算符,如果可以的话 std::cout << x,您可以input >> x(但当然,你 通常不会std::cout << xoutput << x,在哪里 output是传递给函数的ostream& - 也许 std::cout,但也许是std::ofstream或其他 ostream)。当然有区别:输出是 通常比输入更容易,因为你控制源 (你的变量);输入需要大量的错误检查,因为 你几乎可以收到任何东西。特别是你不能, 永远,使用任何输入值,直到您验证输入 成功了。在输出的情况下,通常只执行此操作 一次,在输出结束时(在最后一次冲洗之后) std::cout,或关闭std::ofstream后)。