我有一个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;
}
由于您没有问问题,所以我只能假设您不知道如何从发布的文件中读取一行。使用以下功能。它是这样工作的:
'['
,则返回false –这不是有效的行。']'
。如果不是,则返回false –这不是有效行。']'
之前的编号。欢迎您,祝您好运!
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 )
;
}