Qt读取txt文件中数据并绘制图像

发布于:2021-09-19 00:51:07

由于毕业设计需要,接触到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
#include
QList readTxt(QString path, int Ycolumns, int YoutCol, int colSize,
int outputNum);
#endif // READTXT_H

readTxt.cpp



#include"readTxt.h"
#include
#include
#include
#include
#include
#include

QList 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"< } //判断读取失败与否
QString str;
QTextStream in(&file);
QList xplot;//创建QList对象来存储对应列数据
QList yplot;
int data_len;//检测输出数据个数用的
int secChar=YoutCol*colSize;
int dis=colSize*(Ycolumns-YoutCol);
in.readLine();
in.readLine();//跳两行排除非数字,因为我所读txt前两行都存在非数字标注
while(!in.atEnd()){
qDebug()< 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()<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<
// qDebug()<
// qDebug()<// qDebug()<
// qDebug()< str.clear();//每列数据清空
}

data_len=xplot.length();
qDebug()<//qDebug()<//qDebug()<

if(in.atEnd()){
qDebug()<<"End"< 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"< } //判断读取失败与否
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 if(temp[i]!=&&temp[i+1]==)
columnCnt++;
}
for(int i=0;i sizeCol++;
if(temp[i]==&&temp[i+1]!=)
break;
}
test=QString::number(columnCnt-1);
qDebug()<<"column number is"< test=QString::number(sizeCol);
qDebug()<<"columnSzie is"<if(0==columnCnt&&1==chooseNum)
QMessageBox::warning(this,tr("Txt is empty"),tr("该记事本无可读数据,请重试"),QMessageBox::Yes);

if(1==chooseNum)
return columnCnt-1;//这里去除第一列
else
return sizeCol;
}

判断列数的主要原理就跟判断下降沿一样的思想。


对于我编程风格、基础等存在的问题,欢迎大家提意见。一定认真学*


沃兹基硕德-萌新原理



相关推荐

最新更新

猜你喜欢