gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:31:21 24 4
gpt4 key购买 nike

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

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

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

最佳答案

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

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

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);
}

关于c++从多个文件中读取多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39447218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com