QT平台文件逐行读取和字符串规律输出练习
练习要求
逐行读取指定文件里的字符串,把字符串转换后进行输出,转换要求为十个字符为一组,偶数组(0,2…)为为非数字,奇数组(1,3…)是为数字。非数字用完,则后续全用数字;数字用完,则后续全用非数字。最后把所有行规律结果写入到新文件里。
所用技术
QT按行读取文件
m_FilePath = "C:\\student.txt";
QFile file(m_FilePath);
if(!file.open(QIODevice::ReadOnly | QIODevice::Text))//打开文件
{
qDebug() << "Can't open the file!";
return;
}
QTextStream in(&file); //用文件构造流
line = in.readLine();//读取一行放到字符串里
while(!line.isNull())//字符串有内容
{
line=in.readLine();//循环读取下行
}
判断字符是否为数字或非数字
if(sin[j] > '0' && sin[j] < '9')
{
numpart.append(sin[j]);
if(numpart.length()>=10)
{
slnumpart.append(numpart);
numpart.clear();
}
continue;
}
else if((sin[j]>='a'&&sin[j]<='z')||(sin[j]>='A'&&sin[j]<='Z'))
{
nonnumpart.append(sin[j]);
if (nonnumpart.length()>=10)
{
slnonnumpart.append(nonnumpart);
nonnumpart.clear();
}
continue;
}
支持分组处理使用字符串数组QStringList类
QStringList类提供了一个字符串列表,从QList 继承而来,它提供快速索引为基础的接入以及快速插入和清除,其成员函数用于操作这个字符串列表如append(),insert(), replace(),removeAll(), removeAt(), removeFirst(), removeLast(), and removeOne()。本例里用的append()来进行添加。
细节流程
初学者不能把问题模型化,不能切分步骤。如果以前没接触过QT,则对实际上简单的技术也不敢下手,比如按行读取文件,所以会卡在某个点上浪费时间不敢动手,这时候就需要老师引导了,锐英源孙老师通过在线教育也能进行引导,欢迎关注。
这个练习,首先要把文件读取函数写出来;
文件行读取出来以后,再写一个字符串的处理函数,方便读取的字符串的处理:QString procLine(QString sin);
字符串处理函数中,判断字符串中是否为数字,分三类处理:数字部分和非数字部分,然后是尾部的处理。
(1)数字部分的处理,如果数字部分总长度累计大于等于10,大于等于部分放入数字整组中,;
(2)非数字部分处理,如果非数字部分总长度累计大于等于10,大于等于部分放入非数字整组中;
(3)尾部处理,非数字部分剩余先放入,数字部分剩余后放。
这里是尾部处理的部分代码:
for(int j=0;j
{
sreturn+=slnonnumpart[j];
if(j
{
sreturn+=slnumpart[j];
}
}
for(int k=slnonnumpart.size();k
{
sreturn+=slnumpart[k];
}
sreturn+=nonnumpart;
sreturn+=numpart;
return sreturn;
将读取的每一行传入字符串处理函数中,循环处理,显示到文本框,main中调用显示。