在工程项目开发中,遇到这么个问题:手工计入文件中的数据,每行有三个,前两个是数字,最后一个是标识,现在把这3个数据提取出来。
一提取就出现问题了:由于手工导入,数据间使用空白间隔,有可能是一个空格,有可能多个空格,怎么成功提取了?看Qt文档,终于找到这么个好用的函数。直接给干货吧!
QString fileName = QFileDialog::getOpenFileName(this,
tr("打开文件"),
/*openPath*/".",
tr("ini文件 (*.ini)"));
if(!fileName.isEmpty())
{
QFile file(fileName);
if(!file.open(QIODevice::ReadOnly))
{
qDebug()<<"open error!";
return;
}
QTextStream txtInput(&file);
while(!txtInput.atEnd())
{
QString lineStr;
lineStr = txtInput.readLine();
QStringList str_list = lineStr.simplified().split(" ");
bool ok;
double a = str_list.at(0).toDouble(&ok);
double b = str_list.at(1).toDouble(&ok);
QString c = str_list.at(2);
title.append(a);//title、number、myStr是QVector类型,由于后面要用,是在.h文件内声明的
number.append(b);
myStr.append(c);
}
QFileInfo infomation = QFileInfo(fileName);
QString name = QString(tr("选取文件是:")) + infomation.fileName();
ui->fileLabel->setText(name);
emit sigDataInit();
file.close();
}
这里要讲讲simplified()功能,这个函数把一个字符串首尾的空格全部清除,不管首尾是几个空格哦。字符串中间的空格(包括单个空格、多个空格、\t、\n)都统一转化成一个空格,这样就方便提取了,我们再使用split()函数就能很好拆分了。