0

ファイルがPCLでエンコードされているかどうかを確認する必要があります。そのため、最初の行を見て、ESC文字で始まっているかどうかを確認しています。より良い方法をご存知の場合は、お気軽にご提案ください。これが私のコードです:

bool pclFlag = false;
if (containStr(jobLine, "^\\e")) {
   pclFlag=true;
}

bool containStr(const string& s, const string& re)
{
   static const boost::regex e(re);
   return regex_match(s, e);
}

pclFlagはtrueに設定されません。

4

2 に答える 2

1

Boost.Regex は、文字列が特定の文字で始まるかどうかを確認するだけの場合、やり過ぎのように思えます。

bool pclFlag = jobLine.length() > 0 && jobLine[0] == '\033';

Boost 文字列アルゴリズムを使用することもできます。

#include <boost/algorithm/string.hpp>

bool pclFlag = jobLine.starts_with("\033");

文字列のどこかにエスケープが含まれているかどうかを確認するには、次のようにします。

bool pclFlag = jobLine.find('\033') != npos;
于 2012-10-05T14:24:14.503 に答える
1

静的であると宣言boost::regex eしました。つまり、関数が最初に呼び出されたときにのみ初期化されます。ここでの検索が最初の呼び出しではない場合、最初の呼び出しで渡された文字列が検索されます。

regex_match は文字列全体と一致する必要があります。正規表現の末尾に「.*」(ドット スター) を追加してみてください。

重要式が入力シーケンス全体
と 一致する場合にのみ、結果が true になることに注意してください。シーケンス内のどこかで式を検索する場合は、regex_search を使用します。文字列の接頭辞と一致させたい場合は、フラグ match_continuous を設定して regex_search を使用します。http://www.boost.org/doc/libs/1_51_0/libs/regex/doc/html/boost_regex/ref/regex_match.html

@JoachimPileborgは正しいです... if (jobline[0] == 0x1B) {}はるかに簡単です。

于 2012-10-05T13:19:41.573 に答える