Qt读取txt文件中数据并绘制图像
程序员文章站
2022-06-11 13:31:00
...
由于毕业设计需要,接触到Qt学习。基础比较差。遇到一系列问题,都咬牙慢慢啃下来了。
由于需要将光谱仪采集到的原始数据进行背景扣除,就涉及到文本文件读取工作啦。几乎把所有的帖子都看完了,天资愚钝,还是没整出来。
偶然一天发现Qt中QString的mid,left,right剪切操作。得到了相关灵感。Qt介绍用法如下。
就是可以截取对应字符串。
在我通过光谱仪得到的测试数据中,每行为157.60 618.00 ,第一列为拉曼位移,第二列为散射强度,列间距为12.
所以,可以通过
double xplot=str.right(firstNum_size).toDouble();
double yplot=str.mid(12,secNum_size).toDouble();
为了解放双手,在后续优化程序过程中,添加了判断数据列数和列间距的小代码。因为有时候会得到多列数据。
贴上自己建的头文件和.cpp文件。
readTxt.h
#ifndef READTXT_H
#define READTXT_H
#include<QString>
#include<QList>
QList<int> readTxt(QString path, int Ycolumns, int YoutCol, int colSize,
int outputNum);
#endif // READTXT_H
readTxt.cpp
#include"readTxt.h"
#include <QFile>
#include<QVector>
#include<QList>
#include<QDebug>
#include<QString>
#include<QFileDialog>
QList<int> readTxt(QString path, int Ycolumns,int YoutCol,int colSize,int outputNum)//outputNum,设置为1,2选择输出列数据
{
QFile file(path);
if(!file.open(QFile::ReadOnly|QFile::Text)){
// QMessageBox::warning(this,"Error","read file yangpin.txt default:%1".arg(file.errorString()));
qDebug()<<"Error"<<endl;
} //判断读取失败与否
QString str;
QTextStream in(&file);
QList<int> xplot;//创建QList对象来存储对应列数据
QList<int> yplot;
int data_len;//检测输出数据个数用的
int secChar=YoutCol*colSize;
int dis=colSize*(Ycolumns-YoutCol);
in.readLine();
in.readLine();//跳两行排除非数字,因为我所读txt前两行都存在非数字标注
while(!in.atEnd()){
//// qDebug()<<in.readLine();
str.append(in.readLine());
int len=str.length();
int first=0;
for(first;str[first]!=' ';first++)
;//得到第一个数据长度
int z=len-1-dis;
for(z;str[z]==' ';z--)
;//得到指定输出列数据长度,结合dis
//qDebug()<<first<<endl;
int a=(int)str.mid(0,first).toFloat(); //得到拉曼位移
int b=(int)str.mid(secChar,z-secChar).toFloat(); //得到指定列数的散射强度
xplot.append(a);
yplot.append(b); //获取x y坐标
//*series1<<QPointF(a,b);
// qDebug()<<z<<","<<len<<endl;
// qDebug()<<str<<endl;
// qDebug()<<str.mid(0,6)<<", "<<str.mid(12,z-12)<<endl; //获取x坐标 y坐标
// qDebug()<<str.mid(0,6)<<", "<<str.mid(12,z-12)<<endl; //获取x坐标 y坐标
str.clear();//每列数据清空
}
data_len=xplot.length();
qDebug()<<data_len<<endl;
//qDebug()<<xplot<<endl;
//qDebug()<<yplot<<endl;
if(in.atEnd()){
qDebug()<<"End"<<endl;
file.close();
}
if(1==outputNum)
return xplot;
else if(2==outputNum)
return yplot;
}
QList在大多数情况表现比较优秀。大家也可以去看一下QList、QVector等异同点。差不多就是这样了,结合了很多老铁的老帖。统一谢谢他们。完全是想回报一下。至少我没发现适用于光谱数据预处理的相关文章。哈哈。
int MainWindow::txtFormat(QString path,int chooseNum)
{
QFile file(path);
if(!file.open(QFile::ReadOnly|QFile::Text)){
// QMessageBox::warning(this,"Error","read file yangpin.txt default:%1".arg(file.errorString()));
qDebug()<<"Error"<<endl;
} //判断读取失败与否
QString temp;
QString test;
QTextStream in(&file);
in.readLine();
in.readLine();
temp=in.readLine();
int len=temp.length();
int columnCnt=0;
int sizeCol=0;
for(int i=0;i<len;i++){
if(temp[i]!=' '&&temp[i+1]==' ')
columnCnt++;
}
for(int i=0;i<len;i++){
sizeCol++;
if(temp[i]==' '&&temp[i+1]!=' ')
break;
}
test=QString::number(columnCnt-1);
qDebug()<<"column number is"<<test<<endl;
test=QString::number(sizeCol);
qDebug()<<"columnSzie is"<<test<<endl;
if(0==columnCnt&&1==chooseNum)
QMessageBox::warning(this,tr("Txt is empty"),tr("该记事本无可读数据,请重试"),QMessageBox::Yes);
if(1==chooseNum)
return columnCnt-1;//这里去除第一列
else
return sizeCol;
}
判断列数的主要原理就跟判断下降沿一样的思想。
对于我编程风格、基础等存在的问题,欢迎大家提意见。一定认真学习
沃兹基硕德-萌新原理
下一篇: 张飞,赵云,马超,黄忠的战马叫什么名字?
推荐阅读
-
php读取txt文件组成SQL并插入数据库的方法
-
Java读取txt文件中的数据赋给String变量方法
-
将文本文件TXT中的数据导入Word中并生成表格的具体实现
-
php中将一段数据存到一个txt文件中并显示其内容
-
从数据库中读取一个图片并保存为一个图片文件
-
python实现从文件中读取数据并绘制成 x y 轴图形的方法
-
perl从文件中读取数据并输出的实现代码
-
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
-
Python读取txt文件应用---用python实现读取一个txt文档,并根据相应判断条件在txt文件中,每一行内写入指定数据。
-
Python实现读取txt文件中的数据并绘制出图形操作示例