我想在列表小部件中读取文本文件的特定部分。我尝试了不同的方法,并在网上寻找一些解决方案,但是找不到很多。我是使用Qt的新手,但在很大程度上与它相处得很好。
QFile YearInfo("C:/Users/Documents/info.txt");
YearInfo.open(QIODevice::ReadWrite | QIODevice::Text);
if(YearInfo.isOpen()){
QTextStream in(&YearInfo);
bool readEnabled = false;
QString outputText, startToken = line, endToken = "*"; // line = "2019"
while(!in.atEnd()){
QString getLine = in.readLine();
if(getLine == endToken){
readEnabled = false;
}
if(readEnabled){
outputText.append(getLine + "\n");
}
if(getLine == startToken){
readEnabled = true;
}
}
ui->listWidget->addItem(outputText);
}
YearInfo.flush();
YearInfo.close();
文本文件包含:
2019年职位部门职务日期(WM / RM / JR)*
2020年职位部门职务日期(PM / VR / ST)*
只要您尝试提取以以下方式格式化的一段文本,您编写的代码就可以正常工作
2019
Position Division Title <~~ this line is extracted
Date (W.M./R.M./J.R) <~~ this line is extracted
More stuff <~~ this line is extracted
*
如果您采用以下方式格式化了某些内容
2019 Position Division
Title Date (W.M./R.M./J.R) *
2019 Position Division Title Date (W.M./R.M./J.R) *
因为你,当你发现包含一行开始提取什么都不会被提取仅在startToken
。结束令牌也一样。
您可以尝试while
通过以下方式修改代码中的循环
while(!in.atEnd()){
QString getLine = in.readLine().trimmed();
if(getLine.startsWith(startToken)){
readEnabled = true;
}
if(readEnabled){
outputText.append(getLine + "\n");
}
if(getLine.endsWith(endToken)){
readEnabled = false;
}
}
现在,您正在检查行startsWith
是否startToken
。在这里,我还添加了一条trimmed
指令,以删除每行开头和结尾的空格(以防万一...)。同样的事情与做endsWith
的endToken
。
另外,最好以只读模式打开设备,因为无论如何您都不会对其进行修改
YearInfo.open(QIODevice::ReadOnly | QIODevice::Text);
并且flush
最后的也是多余的。
希望这可以帮助=)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句