将qbyte数组中的长行分成qt中的多行

时间:2017-02-01 07:25:01

标签: c++ qt

我已编写以下代码

    QString WctUtils::getDiskSpace( )
     {
         static QString diskSpaceCmd ( qgetenv("WINDIR")
                           + "\\system32\\wbem\\wmic LOGICALDISK GET Name,FreeSpace,Size,Description/value");

        QProcess proc;
        QByteArray qba;

        proc.start(diskSpaceCmd);


       if(proc.waitForFinished(-1))
         {
          qba = proc.readAllStandardOutput();
          qba = qba.trimmed();
          qba.replace('\r', ' ');
          qba.replace('\n',' ');
          QList<QByteArray> lines = qba.split('\n');

        }

       QString diskSpace(qba);
       return (diskSpace);
    }

获得的输出是:

 {
     "Service": "20170131184024",
     "diskinfo": "Description=Local Fixed Disk   FreeSpace=421098377216   Name=C:   Size=499875049472         Description=CD-ROM Disc   FreeSpace=   Name=D:   Size=         Description=Local Fixed Disk   FreeSpace=324859035648   Name=E:   Size=487687450624         Description=CD-ROM Disc   FreeSpace=0   Name=F:   Size=553459712",

 }

预期输出

      {
       "Service": "20170131184024",
       "diskinfo": "Description=Local Fixed Disk   FreeSpace=421098377216   Name=C:   Size=499875049472       
                   Description=CD-ROM Disc   FreeSpace=   Name=D:   Size=    
                   Description=Local Fixed Disk   FreeSpace=324859035648   Name=E:   Size=487687450624         
                   Description=CD-ROM Disc   FreeSpace=0   Name=F:   Size=553459712"
    }

如何在多行中获取此磁盘信息行?如何将qbyte数组的一部分分成多行?

1 个答案:

答案 0 :(得分:0)

您自己从字符串中删除所有\n个符号,然后立即尝试将其拆分到\n分隔符上,当然它不起作用,因为没有剩余\n在字符串中:

qba.replace('\n',' ');
QList<QByteArray> lines = qba.split('\n');

做你想做的事的一种方法是@Some程序员老兄在评论中建议。另一种方法是在\n上拆分整行,然后你将拥有一个字符串数组,可能有更多元素而不是你需要的。然后你可以遍历那个数组(同时将它输出到控制台或你需要的任何地方),并且只在你修改“描述”部分时添加换行符:

QList<QByteArray> lines = qba.split('\n');
for(const QByteArray& line : lines)
{
    if(line.startsWith("Description")
        cout << "\n" << line.toStdString();
    else
        cout << line.toStdString();
}