我正在做一个需要从文件中获取输入的项目。我想读取数据,使输入文件的第一列进入第一个数组,第二列进入第二个数组,依此类推。
输入文件有 3 列,分别为 string、int 和 double 类型。
所以我需要3个字符串类型的数组,int和double。如何从文件中读取数据,以便每个数组获取其各自的数据?
谢谢。
我正在做一个需要从文件中获取输入的项目。我想读取数据,使输入文件的第一列进入第一个数组,第二列进入第二个数组,依此类推。
输入文件有 3 列,分别为 string、int 和 double 类型。
所以我需要3个字符串类型的数组,int和double。如何从文件中读取数据,以便每个数组获取其各自的数据?
谢谢。
这是您需要的代码
#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;
}
您需要在推回向量之前验证您是否正确流式传输,为此,我将在将任何值推入任何向量之前检查所有正确流式传输的值,因此所有向量将结束相同的长度。
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' );
如果您可以控制文件的实际存储方式,这可能是实现它的最简单方法。
就像是:
while ( i < MAX_SIZE && myFile >> stringArray[i] >> intArray[i] >> doubleArray[i] )
i++;