我正在开发一个需要从文件中获取输入的项目。我想读取数据,使输入文件的第一列进入第一个数组,第二列进入第二个数组,依此类推。
输入文件有3列,分别为string,int和double。
所以我需要3个类型为string,int和double的数组。如何从文件中读取数据,以便每个数组获取相应的数据?
感谢。
答案 0 :(得分:1)
以下是您需要的代码
#include <iostream>
#include <vector>
#include <fstream>
using namespace std;
vector<int> arr1;
vector<string> arr2;
vector<double> arr3;
int main()
{
int i;
string str;
double d;
ifstream fin("myfile.txt");
if (fin.is_open())
{
while (!fin.eof())
{
fin >> i >> str >> d;
fin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
arr1.push_back(i);
arr2.push_back(str);
arr3.push_back(d);
}
}
return 0;
}
答案 1 :(得分:0)
类似的东西:
while ( i < MAX_SIZE && myFile >> stringArray[i] >> intArray[i] >> doubleArray[i] )
i++;
答案 2 :(得分:0)
在推回向量之前,你需要验证你是否正确流式传输,并且为了它,我将在将任何向量推入任何向量之前检查所有正确流量的值,因此所有向量将结束相同的长度。
std::vector< string > column1;
std::vector< int> column2;
std::vector< double > column3;
do
{
// ifs is an open stream
std::string temp1;
int temp2;
double temp3;
ifs >> temp1 >> temp2 >> temp3;
if( ifs )
{
column1.push_back( temp1 );
column2.push_back( temp2 );
column3.push_back( temp3 );
}
}
while( ifs );
这只是一个“粗略”的例子。它假定字符串是单个单词。如果不是,您需要知道如何确定该列的结束位置,并正确阅读。
可能更容易为3个值创建结构,并将读取从文件分离到结构,以及从结构移动到向量。
显然你会知道文件的格式化方式。如果你在一个字符串中读取一行,然后使用正则表达式解析字符串,这可能是将其拆分为3个组成部分的更好方法,特别是知道“字符串”部分的结束位置。也许你的字符串存储在引号内的文件中。
也许您的列以制表符分隔,在这种情况下,您将字符串读取到制表符。
std::getline( ifs, temp1, '\t' );
如果您控制文件的实际存储方式,这可能是实现文件的最简单方法。