【问题标题】:How do i split a Qstring to new line如何将 Qstring 拆分为新行
【发布时间】: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:...' ?

标签: c++ qt split qstring


【解决方案1】:

听起来很明显,但是使用QString::split 怎么样?

QStringList strList = str.split(QRegularExpression("\WNode"),QString::SkipEmptyParts);

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

这就是我的做法。

【讨论】:

  • 可以转成JSON数组吗?
  • 通过几个小字符串解析逻辑,您可以将手头的列表塑造成您想要的任何形式。 QString 提供了许多有用的功能,如“left”、“right”、“mid”、“chop”、“append”、“prepend”等。我建议你看看 QString 文档页面,我想你需要的一切都在那里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 2014-12-30
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多