C++ 如何将Q字符串拆分为新行

C++ 如何将Q字符串拆分为新行,c++,qt,split,qstring,C++,Qt,Split,Qstring,在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: ASHUTOS

在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"
也就是说,它应该只在有空格的情况下分割,而不是在逗号后跟空格的情况下分割?i、 它应该从每行的节点开始?有人能帮助我们在qtc中如何做到这一点吗++

下面是我编写的代码:

   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);
QString Utils::getDiskSpace()
{
静态QString diskSpaceCmd(qgetenv(“WINDIR”)
+“\\system32\\wbem\\wmic logicaldisk获取名称、可用空间、大小、说明/格式:csv”);
qprocessproc;
QByteArray qba;
QString out_str;
QString newStr;
进程启动(diskSpaceCmd);
如果(过程waitForFinished(-1))
{
qba=proc.readAllStandardOutput();
qba=qba.trimmed();
qba=qba.replace('\r','');
QString myString=qba;
QStringList myStringList=myString.split(“\n”);
QStringList descriptions=myStringList[0]。拆分(“,”;
对于(int index=1;index列表听起来可能很明显,但是,如何使用

然后,您可以使用
prepend
在每个字符串的开头添加“节点”字


这就是我要做的。

?为什么我们要使用replace?我不想替换任何我只想拆分的东西,因为只有在只有空格的时候。也就是说,在单词Node之前有一个空格。我只想在那个空格处分开。空格前面不应该有任何其他分号,比如,(逗号),(分号),
replace(“Node:,”\nNode:)
-但是这会影响字符串的开头(例如,“diskinfo”后面的“\n”)。是的,我将重放一个Qstring。然后我需要将其转换为QStringlist以进行拆分?那么,您希望最终得到什么:
Qstring
带有“\n”或
QStringlist
,每个项都是“Node:…”?是否可以转换为JSon数组?使用几个小字符串解析逻辑,您可以将手头的列表塑造成您想要的任何形式。QString提供了很多有用的函数,比如“left”、“right”、“mid”、“chop”、“append”、“prepend”等。我建议您看看QString文档页面,我想您需要的一切都在那里。
QStringList strList = str.split(QRegularExpression("\WNode"),QString::SkipEmptyParts);