C++ && QT 对数据进行排序----完结版

#include "QtGuiApplication4.h"
#include "qDebug"


#include"qDebug"
#include<QTimer>
#include<QTime>
#include<qdir.h>
#include<qmessagebox.h>
#include<qsettings.h>
#include<QFileDialog>
#include<vector>
#include<QStringlist>
#include<QString>
#include<string>
using namespace::std;

QtGuiApplication4::QtGuiApplication4(QWidget *parent)
	: QMainWindow(parent)
{
	
	ui.setupUi(this);

	Initial_function();
}





void QtGuiApplication4::Initial_function()
{
	connect(ui.pushButton_readData, SIGNAL(clicked()), this, SLOT(Read_CSV_data()));
	connect(ui.pushButton_clearData, SIGNAL(clicked()), this, SLOT(Clear_text_data()));

}


bool QtGuiApplication4::Read_CSV_data()
{
	
	int rows;
	int columns;
	Read_CSV_data_file(readData, &rows, &columns);  // 读取数据

	for (int i = 1; i < columns; i++)
	{
		for (int j = 0; j < rows; j++)
		{
			ui.textEdit_show->append("readData[" + QString::number(i) + "][" + 
				QString::number(j) + "]= " + QString::number((readData[i][j]).toDouble()));  //显示
		}
	}
	

	// 选择计算方式
	QStringList Last_result_data;
	switch (ui.comboBox_Method->currentIndex())
	{
	case 0:
		Last_result_sort(&readData[0], &readData[1], &Last_result_data);  //以纯数字方式

		for (int k = 0; k < Last_result_data.size(); k++)
		{

			ui.textEdit_show->append("Last_result_data[" + QString::number(k) + "]= " + 
				QString::number((Last_result_data[k]).toDouble()));  //显示
		}

		break;

	case 1:

		Last_result_sort_Method2(&readData[0], &readData[1], &Last_result_data);

		for (int k = 0; k < Last_result_data.size(); k++)
		{
			ui.textEdit_show->append("Last_result_data[" + QString::number(k) + "]= " + 
				QString::number((Last_result_data[k]).toDouble()));  //显示
		}

		break;

	default:
		break;
	}


	return true;
}



bool QtGuiApplication4::Clear_text_data()
{
	ui.textEdit_show->clear(); //清空内容
	return true;
}


// 文件读取,自选文件
bool QtGuiApplication4::Read_CSV_data_file(QStringList *readData, int *NUMrows, int *NUMcolumns)
{
	/****************************文 件 读 取**********************************************/
	//**选择不同路径文档CSV/Txt文件,并读取其中的数值 
	//**此过程是手动选择需要读取的文件,并返回数据的行数和列数

		QString curPath = QDir::currentPath();  //获取当前应用程序的目录
		QString dlgTitle = "选择一个文件";      //
		QString filter = "CSV文件(*.csv);;文本文件(*.txt)";  //文件过滤器(选择不同后缀的文件)
		QString fileName = QFileDialog::getOpenFileName(this, dlgTitle, curPath, filter);  //返回带路径的完整文件名

		QFile csvFile(fileName);
		QStringList CSVList;
		// 打开文件//必须需要的步骤
		if (!csvFile.open(QIODevice::ReadOnly))
		{
			QMessageBox::warning(this, "Error Message", QStringLiteral("文件不存在,打开失败!")); //提示窗口
			return false;
		}
		// 读取数据
		QTextStream stream(&csvFile);
		while (!stream.atEnd())  //读取到最后一行
		{
			CSVList.push_back(stream.readLine()); //读取所有行数据,并push_back到一起
		}
		csvFile.close(); // 关闭文件
		QStringList oneLineData = CSVList[0].split(","); //数据分割

		for (size_t k = 0; k < oneLineData.size(); k++)
		{
			readData[k].clear();
		}
		// 将数据转化为[列][行]
		for (size_t i = 0; i < CSVList.size(); i++)
		{
			QStringList oneLine = CSVList[i].split(",");
			for (size_t j = 0; j < oneLine.size(); j++)
			{
				readData[j] << oneLine[j];     //读取每一行的所有数据;
			}
			*NUMcolumns = oneLine.size(); //读取数据列数
		}
		*NUMrows = CSVList.size(); //读取数据行数
		return true;
	}
	/******************************************************************************************/





//******************* 方法一******************

// 将结果按照需要的顺序输出
//******前提是第一列为纯数字  如 1 , 2.......***************//
void QtGuiApplication4::Last_result_sort(QStringList *source,QStringList *result, QStringList *sort_result)
{
	int temp;
	for (int i = 0; i < (*source).size(); i++)
	{	
		temp = (*source)[i].toDouble()-1;  //下标从 0 开始  //  注意地方
		*sort_result << (*result)[temp];
	}
	
}


//********************方法 二 *******************

// 将结果按照需要的顺序输出
//******第一列为  字母+数字   如P1 ,P2,.......  ***************//
void QtGuiApplication4::Last_result_sort_Method2(QStringList *source, QStringList *result, QStringList *sort_result)
{

	// 将P1,P2.......,P10......Pn,中的第一个字母去掉,只保留后面的数字
	QStringList number_last;
	QStringList Last_result;
	QString temp;

	for (int i = 0; i < (source[0]).size(); i++)
	{
		number_last << source[0][i].split(',');  // 分裂之后,还是以一列存放;

		for (int j = 0; j < number_last[0].size() - 1; j++)
		{

			qDebug() << "Last_result==" << number_last[0][j + 1] << endl;  //从每个字符串,第二个字符开始打印。

			temp[j] = number_last[0][j + 1]; //赋值给字符串	
		}

		Last_result.append(temp);  //压到一起

		number_last.clear();  // 必须要的清空
		temp.clear();    // 必须要的清空
	}
						 
		// 将保留的转化为数值
		double Last_result_value;
		for (int k = 0; k < Last_result.size(); k++)
		{
			Last_result_value = Last_result[k].toDouble()-1;  //此时数值为对应下标   //下表从0 开始

			// 寻找需要序列的数值
			*sort_result << (*result)[Last_result_value];   //最终输出数值
		}
	}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值