在进行开发、测试时,不可避免的需要验证数据是否已经正确的按照我们的需求进行了计算,直接采用在控制台或结果输出界面输出的方式,除了会导致数据刷屏、卡顿外,数据也不能直观的让我们进行判断和分析。
为此,将数据导入到excel或txt中可以更直观的将相关的数据进行一一对应,且可以通过控制数据写入位序、行号的方式进行原始、处理后的数据的一一对应。
在此先简单介绍一下在Qt中读取、写入到Excel、txt的操作办法,后续遇到更多需求我会及时更新。
1.Qt中读取txt数据
std::ifstream ptr_file;
int M = 2;
int N = 1024;
ptr_file.open("C:\\Users\\87706\\Desktop\\data.txt");
if (!ptr_file) return 0;
for (int i = 0; i < M; i++)//行循环
{
for (int j = 0; j < N; j++)//列循环
{
double data;
ptr_file >> data;
if ((i % 2) == 0)
{
(*datastruct).Y[j] = data;
}
else
{
(*datastruct).Z[j] = data;
}
}
}
ptr_file.close();
首先需要引用#include 头文件,然后创建一个接受txt数据的对象ifstream ptr_file,通过open操作打开指定路径下的文件如:
ptr_file.open(“C:\Users\87706\Desktop\data.txt”);
!!!请注意,在Qt中请使用\,否则会出现文件打不开的情况,可能是语法就是这样的,也要注意斜杠防线不用弄错!!!
然后就可以通过循环,来找到指定的行和列的指定元素啦,我这里就是简单的读取了两行数据,具体需要根据自己的数据进行赋值处理。
最后使用close操作就可以关闭你所打开的文件了。可以参考我上述的代码进行试验。
2.Qt中写入txt数据
std::string TXT_PATH = "C:\\Users\\87706\\Desktop\\data.txt";//这个路径中的.txt我测试的时候好像不用加也可以正确生成txt文件,带我研究一下在进行分析
ofstream txt;
txt.open(TXT_PATH);
//lem为你要遍历存入的数据大小
for(int i=0 ; i< len ; i++)
{
if(txt.is_open()) txt<<data[i].x<<" ";
}
txt<<"\n";
for(int i=0 ; i< len ; i++)
{
if(txt.is_open()) txt<<data[i].y<<" ";
}
txt.close();
在使用Qt将数据写入txt的时候,可以根据上述操作,首先创建一个地址,这个即是你生成的txt所存储的地方,请注意,这个也需要使用\来指定路径。
在txt中,如果想要使数据之间产生一定间隔可以如我一样在每个数据之间增加几个空格,如果需要换行则使用\n来切换至下一行进行数据输入
3.在Qt中读取Excel表格的数据
std::ifstream file("path/to/your/csv/file.csv");
if (!file)
{
std::cout << "Failed to open file." << std::endl;
return -1;
}
std::string line;
while (std::getline(file, line))
{
std::stringstream ss(line);
std::string field;
while (std::getline(ss, field, ','))
{
// Do something with each field
std::cout << field << std::endl;
}
}
首先打开CSV文件并创建一个ifstream对象来读取文件。然后,我们使用while循环逐行读取文件中的内容。对于每一行,我们使用stringstream来分割字段,并使用while循环遍历每个字段进行处理。在这个示例中,我们仅仅使用std::cout输出每个字段的值。注意更改为你的实际路径。
4.在Qt中将数据保存至excel表格中
std::string CSV_PATH = "C:\\Users\\87706\\Desktop\\/yuanshi_xianxingchazhi0810.csv";
ofstream csv;
csv.open(CSV_PATH);
int len = homogenize_profile.get_profile_len();
for (int i = 0; i < len; i++)
{
if (csv.is_open())
{
csv << data[i].x << ",";
}
}
csv << "\n";
for (int i = 0; i < len; i++)
{
if (csv.is_open())
{
csv << data[i].y << ",";
}
}
csv << "\n";
csv.close();
过程基本与txt写入数据类似,但是在数据写入每一个小格时,如果想在同一行插入不同列,则在循环中使用逗号来进行列之间的切换,如果想要将数据写入不同行,则通过\n来进行换行操作。
如果各位码友有其他需求可以评论或者私信联系我,如果感觉文章对你有帮助的话欢迎关注点赞支持!