C++ 使用fstream读取带有浮点数的向量

C++ 使用fstream读取带有浮点数的向量,c++,vector,fstream,C++,Vector,Fstream,我有一个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];

我有一个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);
void选择器(){
int numberOfObjects=0;
字符路径[100];
std::string my_list;
//std::向量参数;

std::cout既然你不是在问问题,我只能假设你不知道如何从发布的文件中读取一行。使用下面的函数。它是这样工作的:

  • 从文件中读取第一个字符。如果无法读取或字符不是
    '['
    ,则返回false–这不是有效行
  • 虽然我们可以读取数字字符,并且字符是逗号,但将数字添加到结果向量中
  • 上次读取的数字后面的字符必须是
    ']'
    。如果不是,则返回false–这不是有效行
  • 添加上次读取的编号(在
    ']'
    之前的编号)
  • 返回true–该行有效
  • 欢迎来到SO,祝你好运

    bool get_线(istream&is,vector&v)
    {
    字符c;
    如果(!(is>>c)| c!='[')
    返回false;
    双d;
    而(is>>d&&is>>c&&c==',')
    v、 推回(d);
    如果(c!=']')
    返回false;
    v、 推回(d);
    返回true;
    }
    int main()
    {
    ifstream是{“c:\\temp\\test.txt”};
    如果(!is)
    返回-1;
    整数行数=0;
    for(向量v;获取线(is,v);+线数)
    /*...*/;
    }
    
    既然你不是在问问题,我只能假设你不知道如何从发布的文件中读取一行。使用下面的函数。它是这样工作的:

  • 从文件中读取第一个字符。如果无法读取或字符不是
    '['
    ,则返回false–这不是有效行
  • 虽然我们可以读取数字字符,并且字符是逗号,但将数字添加到结果向量中
  • 上次读取的数字后面的字符必须是
    ']'
    。如果不是,则返回false–这不是有效行
  • 添加上次读取的编号(在
    ']'
    之前的编号)
  • 返回true–该行有效
  • 欢迎来到SO,祝你好运

    bool get_线(istream&is,vector&v)
    {
    字符c;
    如果(!(is>>c)| c!='[')
    返回false;
    双d;
    而(is>>d&&is>>c&&c==',')
    v、 推回(d);
    如果(c!=']')
    返回false;
    v、 推回(d);
    返回true;
    }
    int main()
    {
    ifstream是{“c:\\temp\\test.txt”};
    如果(!is)
    返回-1;
    整数行数=0;
    for(向量v;获取线(is,v);+线数)
    /*...*/;
    }
    
    我们没有看到问题。我们没有看到问题。感谢你的回应,我在C++中是新的,我被这些IFSH打败了,你在我的大学工作中帮助了我,非常感谢。先生,谢谢你的回应,我在C++中很新,我被这些IFSH打败了,你在我的大学工作中帮助了我,非常感谢,先生。
    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;
    }
    
    bool get_line( istream& is, vector<double>& v )
    {
      char c;
      if ( !(is >> 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 )
        /*...*/;
    }