使用C ++将文件中的数据读入多个数组

时间:2013-11-12 09:52:04

标签: c++

我正在开发一个需要从文件中获取输入的项目。我想读取数据,使输入文件的第一列进入第一个数组,第二列进入第二个数组,依此类推。

输入文件有3列,分别为string,int和double。

所以我需要3个类型为string,int和double的数组。如何从文件中读取数据,以便每个数组获取相应的数据?

感谢。

3 个答案:

答案 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' );

如果您控制文件的实际存储方式,这可能是实现文件的最简单方法。