0

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

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

所以我需要3个字符串类型的数组,int和double。如何从文件中读取数据,以便每个数组获取其各自的数据?

谢谢。

4

3 回答 3

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;
}
于 2013-11-12T10:04:39.070 回答
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' );

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

于 2013-11-12T10:44:47.083 回答
0

就像是:

while ( i < MAX_SIZE && myFile >> stringArray[i] >> intArray[i] >> doubleArray[i] )
  i++;
于 2013-11-12T09:53:52.053 回答