读取带有fstream浮点的向量

问题描述 投票:0回答:1

我有一个paramaters.txt文件,其中包含我的OpenGL代码的一些参数,我需要读取它并将它们放入矩阵中。

parameters.txt:

[6.0,6.0,9.0,5.0,1.0,0.6,0.4]
[3.0,1.0,3.0,6.0,1.0,0.4,0.6]

和这里的一些代码,我确实将.txt中的项目转换为整数(当我使用整数时)

flstream:

void selector() {
        int numberOfObjects = 0;
        char path[100];
    std::string my_list;
    //std::vector<std::vector<int>> parameters;
    std::cout << "Insira o Caminho Para As Especificações dos Solidos: "; //Insert the path to the especifications of the solids
    std::cin.getline(path, sizeof(path));
    std::cout << path;
    std::ifstream arquivo(path);
    std::string line;
    std::string vectors;
    if (arquivo.is_open()) {
        while (getline(arquivo, line)) {
            numberOfObjects ++;
            std::cout << line << std::endl;
            vectors.append(line);
        }
        arquivo.close();
    }
    parameters = matrix(vectors,numberOfObjects);

转换器:

std::vector<std::vector<int>> matrix(std::string vectors,int numberOfObjects){

    int teste = std::stoi (vectors,nullptr,10);

    int counter = 0;
    int numbers = 0;
    std::string chars = "[],";

    for(char c: chars){vectors.erase(std::remove(vectors.begin(), vectors.end(),c),vectors.end());}

    std::vector<char> v(vectors.length());
    std::copy(vectors.begin(), vectors.end(),v.begin());
    std::vector<int> convertedToInt;

    for(const auto& c :vectors)
        convertedToInt.push_back(c - 48);

    std::vector<std::vector<int>> result;

    result.resize(numberOfObjects);
    for(int i = 0; i < numberOfObjects ; i++){
        result[i].resize((convertedToInt.size()+1)/numberOfObjects);
    }
    for(int j = 0; j < convertedToInt.size(); j++){
        if(numbers == vectors.size()/numberOfObjects) numbers = 0;
        result[counter].at(numbers) = convertedToInt[j];
        if(numbers < vectors.size()/numberOfObjects) numbers++;
        if((j+1) % (vectors.size()/numberOfObjects) == 0) counter++;
    }
    return result;
}
c++ vector fstream
1个回答
0
投票

由于您没有问问题,所以我只能假设您不知道如何从发布的文件中读取一行。使用以下功能。它是这样工作的:

  1. 从文件中读取第一个字符。如果无法阅读或字符不是'[',则返回false –这不是有效的行。
  2. 虽然我们可以读取numbercharacter并且字符是逗号,但是将数字添加到结果向量中。
  3. 最后读取的数字后的字符必须为']'。如果不是,则返回false –这不是有效行。
  4. 添加最后读取的编号(']'之前的编号。
  5. 返回true –该行有效。

欢迎您,祝您好运!

bool get_line( istream& is, vector<double>& v )
{
  char c;
  if ( !is.get( c ) || c != '[' )
    return false;

  double d;
  while ( is >> d && is >> c && c == ',' )
    v.push_back( d );

  if ( c != ']' )
    return false;

  v.push_back( d );

  return true;
}

int main()
{
  ifstream is{ "c:\\temp\\test.txt" };
  if ( !is )
    return -1;

  int lines_count = 0;
  for ( vector<double> v; get_line( is, v ); ++lines_count )
    ;
}
© www.soinside.com 2019 - 2024. All rights reserved.