C++ 操作方法:从.txt或.csv文件导入数值变量
c++ how-to: import numeric variables from .txt or .csv file
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;
}
谢谢
ifstream ifs ("input_file.txt");
if (!ifs)
// process error
ifs >> DISTAB;
ifs >> POSAstart;
....
如果你知道如何用cout
打印一堆变量,你就知道如何用输入流读取它们——恰恰相反。只需反转cout
呼叫的箭头:
myInputFile >> Dist >> PosAi >> PosAo >> ...;
注意输入流只能将实际变量作为参数来>>
,而输出流可以采取临时,例如如何使用<< " "
打印空间。但幸运的是,输入流会自动吃空格,所以你可以忽略它。因此,我在上一行中的示例是正确的。
此外,cout
在 iostream
中预先声明,但您需要声明输入流。 ifstream
将要读取的文件的名称作为其第一个参数:
ifstream myInputFile ("input_file.csv");
首先,您(通常(不会为此使用fstream
,而是使用一个ifstream
. 而且您通常不会直接访问它,但是通过istream&
;正如ofstream
派生自 ostream,
ifstream derives from
istream , so that you can use
iStream&' 独立于流的类型。
最后,对于ostream
上每个<<
运算符,有一个istream
上的对应>>
运算符,所以如果你能做到 std::cout << x
,你可以做input >> x
(但当然,你通常不做std::cout << x
,你做output << x
,其中 output
是传递到函数中的ostream&
- 也许 std::cout
,但也许是std::ofstream
,或者其他 ostream
(。 当然,有区别:输出是通常比输入更容易,因为您可以控制源(您的变量(;输入需要大量的错误检查,因为你可以从字面上收到任何东西。 特别是,你不能,永远,使用任何输入值,直到您验证输入成功。 在输出的情况下,您通常只这样做一次,在输出结束时(最后一次刷新到 std::cout
,或关闭std::ofstream
后(。
- 无法将标准库导入本机 android 项目中的头文件
- 如何在安卓工作室中将c ++头文件从一个文件夹导入到另一个文件夹?
- C++20 使用 Visual Studio 编译模块:不编译或导入 ixx 文件
- Assimp - 如何使用任何文件格式导入带有纹理的网格?
- 链接器找不到导入的 DLL 的 LIB 文件
- 如何在 c++ 中导入文件?以及如何成功编译它们?
- 从文件导入数据时遇到问题.我有一个没完没了的循环
- 如何在Windows窗体应用程序中打开txt文件并将行导入文本框
- CMake GoogleTests在我的测试文件中找不到导入的头文件
- 移植DXUT SDKMesh以导入OBJ文件,在哪里添加纹理坐标和索引
- 使用 GDAL 将 DXF 块从一个文件导入到另一个文件
- 如何从 Makefile 中的其他目录导入所有源代码和头文件
- 如何在 C++ 中使用特征库导入矩阵市场文件
- 我将如何在C++中文件处理对象(存储/导入)
- 如何使用C++ GPGME 导入 GPG 密钥和解密文件
- 如何修复在glm中导入h文件'duplicate symbol'
- 初学者c++导入文件,查找sum和average
- 导入文件txt时出错
- C++程序如何从".a"文件导入文件,但您不能自己反转".a"文件?
- 导入文件存在于eclipse C++Linux项目中