2017-02-06 6 views
-1

にQSTRINGを分割するにはどうすればよいのC++私はQtの中に新しい行に文字列をSpliting新しいライン

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); 

}

+0

['QString :: replace'](http://doc.qt.io/qt-5/qstring.html#replace-8)? –

+0

私たちは置き換える必要があります私は、スペースだけがある場合にのみ分割したいものを置き換えたくありません。すなわち、単語の前にスペースがあります。私はそのスペースでのみ分離したいですか?スペースは、それ以前の(カンマ)、(セミコロン)のような他の区切り文字を持つべきではありません。 – cyley

+0

'replace(" Node: "、" \ nNode: ")' - これは文字列の先頭に影響します'"diskinfo"の後ろに)。 –

答えて

0

が明らかに聞こえるけど、どのようにQString::splitの使用に関する可能性がありますか?

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

その後、あなたはprependと各文字列の先頭に「ノード」という単語を追加することができます。

これは私がやる方法です。

+0

JSon配列に変換することはできますか? – cyley

+0

いくつかの小さな文字列解析ロジックを使用すると、必要な任意のフォームにリストを整形できます。 QStringは、 "left"、 "right"、 "mid"、 "chop"、 "append"、 "prepend"などのような多くの便利な関数を提供します。QStringのドキュメントページを見ることをお勧めします。 –

関連する問題