如何读取多个输入文件并写入 txt 中的新文件和 C++ 中的 excel?
How to read multiple input files and write into a new file in txt and excel in C++?
我曾经运行通过读取1个txt文件(1_Hello.txt")进行计算,通过函数计算输出,然后将输出写入新的txt文件。
但现在我有 5000 个 txt 文件(“1_Hello.txt”到“5000_Hello.txt”)。我想读取所有 5000 个 txt 文件,通过函数(变量“a”和向量“v”)计算每个 txt 文件,并将这 5000 个文件的输出写入一个新的 txt 文件和一个新的 excel 文件包含所有 5000 个输入文件的计算结果。
输入格式:id x y z
例如:1 9 7 5
想要的输出格式:id x y z add() int_vector()
例如:1 9 7 5 5.5 123
如何读取 5000 个 txt 文件并将函数的计算结果写入新的 txt 和 excel 文件?
如有任何帮助,我们将不胜感激。
double add(){
// do something
}
void output_vector(std::vector<int> &v) {
// do something
}
int main() {
std::vector<int> v;
double a;
ifstream in("1_Hello.txt");
in.close();
a=add();
output_vector(v);
return 0;
}
这里有一些非常简单但不完整的代码,可能会有所帮助:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
int main(int argc, char* argv[]) {
/* define some vectors to store the data in */
std::vector<int> id_vec;
std::vector<int> x_vec;
std::vector<int> y_vec;
std::vector<int> z_vec;
std::vector<double> calc_1_vec;
std::vector<double> calc_2_vec;
for (int i = 1; i < 5001; ++i) {
std::string file_name = std::to_string(i) + std::string("_hello.txt");
std::ifstream input_file (file_name);
if (input_file.is_open()) {
/* read whatever is in the file, maybe in a loop if there is more stuff in it */
/* then close it */
input_file.close();
/* parse the input line and store the values in some variables */
/* calculate whatever it is that you need to calculate */
/* then store the calculated values in the vectors */
/* also store the read values in the vectors */
}
else {
std::cout << "could not open file" << std::endl;
}
}
/* sort the vectors according to your needs */
/* make sure that zou change the other vectors accordingly */
/* so if you switch the 3. and the 4. index in the ID vector */
/* then also switch those in the other vectors */
/* open up the output file and write the vectors into the files */
}
当然还有更好的解决方案,比如使用 std::filesystem 读取目录中与特定模式匹配的所有文件。
另一项改进是只有一个向量并定义一个存储在该向量中的结构。该结构然后具有 ID、X、Y、Z 和计算字段。然后你可以使用标准库中的一些排序函数。您可以拥有处理计算、打印等的成员函数。
struct data {
int id;
int x;
int y;
int z;
double calc_1;
double calc_2;
};
然后简单地:
std::vector<data> data_vec;
我曾经运行通过读取1个txt文件(1_Hello.txt")进行计算,通过函数计算输出,然后将输出写入新的txt文件。
但现在我有 5000 个 txt 文件(“1_Hello.txt”到“5000_Hello.txt”)。我想读取所有 5000 个 txt 文件,通过函数(变量“a”和向量“v”)计算每个 txt 文件,并将这 5000 个文件的输出写入一个新的 txt 文件和一个新的 excel 文件包含所有 5000 个输入文件的计算结果。
输入格式:id x y z
例如:1 9 7 5
想要的输出格式:id x y z add() int_vector()
例如:1 9 7 5 5.5 123
如何读取 5000 个 txt 文件并将函数的计算结果写入新的 txt 和 excel 文件?
如有任何帮助,我们将不胜感激。
double add(){
// do something
}
void output_vector(std::vector<int> &v) {
// do something
}
int main() {
std::vector<int> v;
double a;
ifstream in("1_Hello.txt");
in.close();
a=add();
output_vector(v);
return 0;
}
这里有一些非常简单但不完整的代码,可能会有所帮助:
#include <iostream>
#include <string>
#include <vector>
#include <fstream>
int main(int argc, char* argv[]) {
/* define some vectors to store the data in */
std::vector<int> id_vec;
std::vector<int> x_vec;
std::vector<int> y_vec;
std::vector<int> z_vec;
std::vector<double> calc_1_vec;
std::vector<double> calc_2_vec;
for (int i = 1; i < 5001; ++i) {
std::string file_name = std::to_string(i) + std::string("_hello.txt");
std::ifstream input_file (file_name);
if (input_file.is_open()) {
/* read whatever is in the file, maybe in a loop if there is more stuff in it */
/* then close it */
input_file.close();
/* parse the input line and store the values in some variables */
/* calculate whatever it is that you need to calculate */
/* then store the calculated values in the vectors */
/* also store the read values in the vectors */
}
else {
std::cout << "could not open file" << std::endl;
}
}
/* sort the vectors according to your needs */
/* make sure that zou change the other vectors accordingly */
/* so if you switch the 3. and the 4. index in the ID vector */
/* then also switch those in the other vectors */
/* open up the output file and write the vectors into the files */
}
当然还有更好的解决方案,比如使用 std::filesystem 读取目录中与特定模式匹配的所有文件。
另一项改进是只有一个向量并定义一个存储在该向量中的结构。该结构然后具有 ID、X、Y、Z 和计算字段。然后你可以使用标准库中的一些排序函数。您可以拥有处理计算、打印等的成员函数。
struct data {
int id;
int x;
int y;
int z;
double calc_1;
double calc_2;
};
然后简单地:
std::vector<data> data_vec;