c ++从几个文件中读取几个数组

Posted

技术标签:

【中文标题】c ++从几个文件中读取几个数组【英文标题】:c++ reading several arrays from several file 【发布时间】:2016-09-12 09:29:03 【问题描述】:

我有几个文本文件,file_1.dat file_2.dat .....它们每个都包含这样的三列

x | y | z
1   2   3
5   8   9
4   3   1
.....

我要定义三个数组X[],Y[],Z[],其中X[]记录所有文件第一列的数字,Y[]记录所有文件第二列的数字, Z[] 保存所有文件的第三列。所以代码应该有一个文件数量的循环。此外,代码应该忽略第一行(这是数据文件的标题)。最简单的方法是什么?

【问题讨论】:

【参考方案1】:

基本上,您只需遍历所有文件并将文件中的所有坐标附加到一个向量缓冲区..

这是非常简单的()代码:

struct vec3 
    int x;
    int y;
    int z;
    vec3(int a, int b, int c) 
        x = a;
        y = b;
        z = c;
    


vec3 parseVec3Line(const char* str) 
    // do your real implementation for parsing each line here
    return vec3(str[0], str[2], str[4]);


int main() 
    std::vector<vec3> data;

    // iterate over all files you want to read from
    for(const auto& it : files) 
        int fd = open(it); // open the file
        while(!EOF)  // read all lines
            read_line(buffer, fd); // copy each line from file to temp buffer
            data.push_back(parseVec3Line(buffer)); // append the parsed data
        
    
    return 0;


我建议你看一下regular expressions来解析文件。 如果您知道某些数字之间将使用空格作为分隔符,您可以简单地执行以下操作:
bool parseVec3Line(const char* str, vec3& vec) 
    // this regular expression will separate the input str into 4 groups..
    // str(0) contains the input str
    // str(1) contains x coord
    // str(2) contains y coord
    // str(3) contains z coord
    static std::regex regx("^([0-9]+)[ ]+([0-9]+)[ ]+([0-9]+)$");
    std::smatch match;

    if(std::regex_search(str, match, regx) && match.size() != 4)
        return false;

    vec.x = str2int(match.str(1));
    vec.y = str2int(match.str(2));
    vec.z = str2int(match.str(3));
    return true;

在循环内你可以做类似的事情:

while(!EOF) 
    read_line(buffer, fd);
    vec3 vec;
    if(!parseVec3Line(buffer, vec))
        continue;
    data.push_back(vec);

【讨论】:

谢谢!如何忽略第一行是 x |是 | z? 您可以简单地使用正则表达式。您将每一行传递给 regex_search,如果它与正则表达式匹配,您将附加值,但是,如果它不匹配,您可以简单地忽略该行。【参考方案2】:

编写一个函数,将一个文件的内容附加到您的数组中。 在遍历所有文件的循环中调用此函数。

【讨论】:

请更具体!

以上是关于c ++从几个文件中读取几个数组的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript,从几个数组中获取所有唯一组合[重复]

在 hadoop namenode 中读取编辑日志时出错

如何获取 MongoDB 存储的视频文件的剪辑?

我们如何在 pyspark 的不同模块中使用相同的连接数据框用法

更新pyqtgraph的最佳方法?

移动应用程序 - 在后端存储和版本相对静态的 json 文件