要件-> 文字列から部分文字列を抽出します。格納する単語は太字で表示されます
サンプル文字列 -> "Mon Dec 10 23:04:20 2012 [pid 3194] [ftp] OK UPLOAD: Client "192.168.10.14", "/pub/upload/Untitleppppp.txt", 80 bytes, 0.62Kbyte/sec " // このサンプル文字列は、他の関数を介して ftp ログから取得されます。
上記の文字列から値を抽出する関数を実装しました。私のアプローチが正しいかどうか、あまり自信がありませんか?皆さん、ご意見をお聞かせください。
第二に、将来的には、サンプル文字列の 80 バイトである転送されたバイト数を取得したいのですが、どうすればそれを達成できますか。現時点では、私の関数はスペース区切り文字を介して文字列をベクトルに分割するため、バイト数を知りたい場合は、80 バイトではなく 80 バイトを取得します。アップロードまたはダウンロードが失敗した場合、この部分文字列は取得されません。
どんなアイデアでも役に立ちます。
bool SplitString( const std::string& logString, std::string& type, std::string& status, std::string& speed )
{
bool result = true;
std::vector<std::string> splitVector ;
// split the string and puhback into vector.
boost::split(splitVector,logString, boost::is_any_of("\t "));
typedef std::vector<std::string>::const_iterator iter;
iter iterString = find(splitVector.begin(), splitVector.end(), "[ftp]") ;
if( iterString == splitVector.end() )
{
std::cout <<"Ftp Log is requested .. But this is not a ftp log try again" ;
result = false;
}
if( result == true )
{
std::cout << " pos val = " << *iterString ;
status = *(++iterString);
type = *(++iterString);
speed = splitVector.back();
}
return result;
}
よろしくお願いします、 サマンサ