C++ 将文本文件读入 vec4 数组

oog*_*gly 0 c++ arrays text file

我知道那里有很多文本到数组的问题,但我很难将这些问题与我的问题相匹配。

我不擅长 C++,但需要将它用于我的 OpenGL 编程。

基本上我已经制作了一个 vec4 数组(vec4 对于坐标系统来说只是 4 个“点”),然后我将它们打印到一个文本文件中。文件读起来像这样(我删除了最后一点,因为它总是 1,我想我可以在以后阅读文本文件时添加它):

( 0.26, 0385, 0.48 )

( 0.27, 0386, 0.47 )

( 0.28, 0387, 0.46 )

( 0.29, 0388, 0.45 )
Run Code Online (Sandbox Code Playgroud)

所以每一行都由一个 endl 分隔;

现在我想读取这个文本文件并将其重新转换为 vec4 数组。避免“(”、“、”和“)”的最简单方法是什么?我可能会编写大量嵌套的 if/else 来清除这些不需要的字符,但这会非常低效,而且我确信有人有更聪明的方法。

有什么建议?帮助?

谢谢!

Ker*_* SB 5

好吧,如果格式绝对肯定是这样的,那么你可以做一个简单的解析,嵌入到标准的基于行的输入习惯用法中:

#include <fstream>   // for std::ifstream
#include <sstream>   // for std::istringstream
#include <string>    // for std::string and std::getline
#include <vector>    // for std::vector
#include <tuple>     // for std::tuple

int main()
{
    std::ifstream infile("thefile.txt");
    std::string line;

    std::vector<std::tuple<double, double, double, double>> points;

    while (std::getline(infile, line))
    {
        std::istringstream iss(line);
        double d1, d2, d3;
        char c1, c2, c3;

        if ((iss >> c1 >> d1 >> c2 >> d2 >> c3 >> d3) &&
            (c1 == '(' && c2 == ',' && c3 == ',')        )
        {
            points.emplace_back(d1, d2, d3, 1.0);
        }
        else
        {
            // error processing this line
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

可能发生的两个错误是 aline无法解析为所需的标记,或者分隔符不符合预期。这取决于你想如何处理。

如果您需要更大的灵活性,您可以使用 a 处理每一行<regex>,或者您甚至可以编写一个更强大的通用解析器,如 Boost.Qi(尽管这绝对是矫枉过正)。