2016-08-11 6 views
0

TStringListを使って "ipconfig/all"の出力を解析したいと思います。TStringListに大きな文字列を追加する方法

AddStringsを使用すると、戻り文字列全体が最初の要素になります。私はLoadFromStreamを使用しようとしましたが、コンパイラが「LoadFromStream」生きていない

候補関数の呼び出しのために私

ノー一致するメンバ関数を与えない:から知られていない変換 "最初の引数のための 'System :: Classes :: TStream *'(別名 'System :: UnicodeString')

Stringをストリームに取得する方法、またはTStringListに返すStringを取得する別の方法はありますか?

TStringList *IPConfig = new TStringList; 
IPConfig->AddStrings(ExecuteExternalFile("ipconfig", "/all", false)); //everything returned ends up in one element defeating the purpose of using a TStringList 
IPConfig->LoadFromStream(ExecuteExternalFile("ipconfig", "/all", false)); //won't compile 
+0

は 'STRING'のインスタンスで管理される各文字列の場合や、各文字列の終わりを示す改行文字でちょうど1つの文字列のですか? 'ExecuteExternalFile'が' TStringList'を返すのはなぜでしょうか? –

+1

正しく覚えていれば、 'TStringList'の' Delimiter'プロパティで遊ぶ必要があります。私がVCLを使ってからしばらくしてきました。 – user4581301

+0

ExecuteExternalFileは、改行文字を含む1つの巨大なStringを返しています。 ExecuteExternalFileがTStringListを返すようにする方法はありますか?それはWindowsの関数なので、私はそれが何であるかと考えて、返されたStringをそのまま扱わなければならないのですか? – martinarcher

答えて

0

私はDelimiterプロパティに戻ってくれてありがとう。私はそれを再訪し、それにはStrictDelimiterをtrueに設定する必要があるバグがあることがわかりました。そうでなければ、常にスペースを使ってテキストを区切ります。今それは正常に動作します。ありがとう!

IPConfig->StrictDelimiter = true; 
IPConfig->Delimiter = '\n'; 
IPConfig->DelimitedText = ExecuteExternalFile("ipconfig", "/all", false); 
+3

これはバグではありません。これは意図的であり、文書化されています(http://docwiki.embarcadero.com/Libraries/en/System.Classes.TStrings.DelimitedText)。 "* StrictDelimiter'がFalseに設定されている場合、スペース文字も区切り記号の値にかかわらず、区切り記号で区切られています。これは、引用符で囲まれたスペース文字がない場合には当てはまりません。* " –

+0

特定の区切り記号が設定されていない場合でも、特定の区切り文字を設定した後にスペースを使用し続けることは予想外の動作であり、奇妙に思えます。私はネット上の解決策を探していたので、ループといくつかの他のもののために私を投げました。ああ、私はあなたの燃えた後、あなたが将来それを簡単に忘れることはないと思います。 :)解明のおかげでレミー! – martinarcher

+0

それはあなたにとって奇妙に見えるかもしれませんが、それは意図され、文書化された動作なので、バグではありません。 –

0

あなたはLoadFromStream()TStringStreamを使用することができます。

TStringList *IPConfig = new TStringList; 
TStringStream *Strm = new TStringStream(ExecuteExternalFile("ipconfig", "/all", false)); 
IPConfig->LoadFromStream(Strm); 
delete Strm; 
... 
delete IPConfig; 
関連する問題