【发布时间】:2017-02-06 08:35:51
【问题描述】:
在 Qt c++ 中将字符串拆分为新行
Qstring 是
Qstring str = "diskinfo: Node: ASHUTOSH-PC, Description: Local Fixed Disk, FreeSpace: 418581491712, Name: C:, Size : 499875049472 Node: ASHUTOSH-PC, Description: CD-ROM Disc, FreeSpace: , Name: D:, Size : Node: ASHUTOSH-PC, Description: Local Fixed Disk, FreeSpace: 324982935552, Name: E:, Size : 487687450624 Node: ASHUTOSH-PC, Description: CD-ROM Disc, FreeSpace: 0, Name: F:, Size : 553459712"
预期输出是
"diskinfo: Node: ASHUTOSH-PC, Description: Local Fixed Disk, FreeSpace: 420842713088, Name: C:, Size : 499875049472
Node: ASHUTOSH-PC, Description: CD-ROM Disc, FreeSpace: , Name: D:, Size :
Node: ASHUTOSH-PC, Description: Local Fixed Disk, FreeSpace: 324858568704, Name: E:, Size : 487687450624
Node: ASHUTOSH-PC, Description: CD-ROM Disc, FreeSpace: 0, Name: F:, Size : 553459712"
也就是说只有在有空格时才应该拆分,而不是在逗号后跟空格时才拆分?即它应该在每一行都以 Node 开头?任何人都可以帮助如何在Qt c ++中完成此操作
下面是我写的代码:
QString Utils::getDiskSpace( )
{
static QString diskSpaceCmd ( qgetenv("WINDIR")
+ "\\system32\\wbem\\wmic logicaldisk get name, freespace, size, description /format:csv");
QProcess proc;
QByteArray qba;
QString out_str;
QString newStr;
proc.start(diskSpaceCmd);
if(proc.waitForFinished(-1))
{
qba = proc.readAllStandardOutput();
qba = qba.trimmed();
qba =qba.replace('\r',' ');
QString myString =qba;
QStringList myStringList = myString.split("\n");
QStringList descriptions = myStringList[0].split(",");
for(int index = 1;index < myStringList.length();index++)
{
QStringList data = myStringList[index].split(",");
QStringList out;
for(int ind_2 = 0; ind_2 < data.length(); ind_2++)
out.push_back(descriptions[ind_2] + ": " +data[ind_2]);
out_str += out.join(", ");
}
out_str = out_str.replace("Node:", "\nNode:");
QStringList list;
if( !out_str.startsWith( '\n' ) )
out_str+=' ';
for( int i = 0; i < out_str.count( '\n' ); ++i ){
list << out_str.section( '\n', i, i, QString::SectionIncludeTrailingSep ).simplified();
}
foreach( QString out_str, list )
QLOG_DEBUG()<<"Out_Str" << out_str;
}
QString diskSpace(out_str);
return (diskSpace);
}
【问题讨论】:
-
为什么要使用replace 我不想只在只有空间的情况下替换我想要拆分的任何东西。即在单词节点之前有一个空格..我只想在那个空格处分开?空格前不应有任何其他分隔符,例如,(逗号),(分号),
-
replace(" Node:", "\nNode:")- 但是这会影响字符串的开头(例如“diskinfo”之后的'\n')。 -
是的,我将替换一个 Qstring 。那么我需要将其转换为 QStringlist 进行拆分吗?
-
那么你到底想得到什么:
QString带有 '\n's 或QStringList每个项目都是 'Node:...' ?