从文本文件创建向量的向量

时间:2015-12-01 18:36:01

标签: c++ text vector

我必须从文本文件创建矢量矢量。有问题的值是整数。

值是固定的3列,具有不同的行。但是,我不相信这会导致我的问题。我认为我遇到的主要问题是文本文件中的值没有被放入向量向量中。相关代码如下:

def delivery_date_cannot_be_after_order_date
  puts 'running method'
  if promised_delivery_date.to_date.present? && promised_delivery_date.to_date < created_at.to_date
    puts 'detected error'
    errors.add(:promised_delivery_date, "can't be in the past")
  end
end

我对编码很新,非常困惑。

2 个答案:

答案 0 :(得分:0)

您需要回放ifstream,添加:

infile.seekg(0);

在您的第二个while (getline(infile,line)) {

之前

这是因为当您读取文件时,会增加指向当前文件位置的内部指针。它在第一个getline循环中递增到文件结尾,所以在第二个你需要倒回它。

你的第二个错误就在于;

vector< vector<int> > properties(lines,vector<int>(3));

在矢量矢量中创建三个元素的矢量,但在读取循环中,您可以从文件中添加四个元素。您应该将其更改为vector<int>(4)

第三个问题,是你解析文件的方式。在第二个循环中,您逐行读取文件,这表示您要解析它,但您的代码实际上是错误的:

int i = 0;
while (getline(infile,line)) {
    // This actually makes no sense, you have read one line 
    //  which you should parse and put results into properties vector. 
    //for(int i=0; i < lines; i++){
    //    for (int j=0; j<4; j++){
    //        infile  >> properties[i][j];
    //    }
    //}    

    // parsing would look like this (depends on your input file):
    std::istringstream in(line);
    in >> properties[i][0] >> properties[i][1] >> properties[i][2];
    i++;
}

答案 1 :(得分:0)

首先关闭

while (getline(infile, line))
{
    ++lines;
}

将在文件中读取,直到它到达文件末尾。然后,当您再次从文件中读取时,您已经在最后,因此不会读取任何内容。您可以从文件中读取并将值输入到矢量中,而不是从文件中读入以查找文件大小。当您向其自动添加数据时,矢量将增长。

ifstream infile("material_properties.txt");
vector< vector<int> > properties;
vector<int> row(3);
while (infile >> row[0] >> row[1] >> row[2])
{
    properties.push_back(row);
}