c++.stlsoft - could string_tokeniser inlcude erase()?
Sometimes, the users may erase some items in delimited string.
Consider this case: say the user want to search semicolon delimited files in
a semicolon delimited directories, i.e. search "1.h;2.h" in
"f:\sourcecode\1;f:\sourcecode\2".
once the file is located, it should be deleted from semicolon delimited
files, the code looks like:
typedef string_tokeniser<string,char> tokeniser;
tokeniser tokendirs("f:\sourcecode\1;f:\sourcecode\2",';');
tokeniser tokenfiles("1.h",';');
tokeniser::const_iterator dir = tokendirs.being();
tokeniser::const_iterator dirEnd = tokendirs.end();
for (; dir!= dirEnd && tokenfiles.size(); ++dir)
{
string files = join(tokenfiles); // i.e. get semicolon delimited
string.
string strDir(*dir);
findfile_sequence file_seq(strDir.c_str(), files.c_str(), ';',
findfile_sequence::files);
findfile_sequence::const_iterator foundFile = file_seq.begin();
findfile_sequence::const_iterator foundFileEnd = file_seq.End();
for (; foundFile!= foundFileEnd; ++foundFile)
{
string sFile((*foundFile).get_filename());
tokeniser:: const_iterator iFound =
find(tokenfiles.begin(),tokenfiles.end(),sFile);
if (iFound != tokenfiles.end())
tokefiles.erase(iFound); // this function is
helpful!!!
}
}
corrently , I split delimited string into vector for applying this way.
thanks
chang
Dec 05 2005
I'm not 100% sure what you're driving at, but I'm pretty sure it's not
appropriate for a general-purpose class template like string_tokeniser. One
of its important features is that it is very efficient - in fact I believe
it's pretty much the fastest tokeniser available - and adding a feature to
change the string being tokenised would complicate it, and likely reduce its
performance characteristics.
But I'm very glad you're making good use of the libraries! ;-)
"chenchang" <baibaichen sohu.com> wrote in message
news:dn15hr$hgk$1 digitaldaemon.com...
Sometimes, the users may erase some items in delimited string.
Consider this case: say the user want to search semicolon delimited files
in
a semicolon delimited directories, i.e. search "1.h;2.h" in
"f:\sourcecode\1;f:\sourcecode\2".
once the file is located, it should be deleted from semicolon delimited
files, the code looks like:
typedef string_tokeniser<string,char> tokeniser;
tokeniser tokendirs("f:\sourcecode\1;f:\sourcecode\2",';');
tokeniser tokenfiles("1.h",';');
tokeniser::const_iterator dir = tokendirs.being();
tokeniser::const_iterator dirEnd = tokendirs.end();
for (; dir!= dirEnd && tokenfiles.size(); ++dir)
{
string files = join(tokenfiles); // i.e. get semicolon delimited
string.
string strDir(*dir);
findfile_sequence file_seq(strDir.c_str(), files.c_str(), ';',
findfile_sequence::files);
findfile_sequence::const_iterator foundFile = file_seq.begin();
findfile_sequence::const_iterator foundFileEnd = file_seq.End();
for (; foundFile!= foundFileEnd; ++foundFile)
{
string sFile((*foundFile).get_filename());
tokeniser:: const_iterator iFound =
find(tokenfiles.begin(),tokenfiles.end(),sFile);
if (iFound != tokenfiles.end())
tokefiles.erase(iFound); // this function is
helpful!!!
}
}
corrently , I split delimited string into vector for applying this way.
thanks
chang
Dec 05 2005
btw, if you're doing sophisticated file-system searching, check out
http://recls.org/. The docs are no better than those of STLSoft, but the
library's well-tested and pretty useful. ;-)
"chenchang" <baibaichen sohu.com> wrote in message
news:dn15hr$hgk$1 digitaldaemon.com...
Sometimes, the users may erase some items in delimited string.
Consider this case: say the user want to search semicolon delimited files
in
a semicolon delimited directories, i.e. search "1.h;2.h" in
"f:\sourcecode\1;f:\sourcecode\2".
once the file is located, it should be deleted from semicolon delimited
files, the code looks like:
typedef string_tokeniser<string,char> tokeniser;
tokeniser tokendirs("f:\sourcecode\1;f:\sourcecode\2",';');
tokeniser tokenfiles("1.h",';');
tokeniser::const_iterator dir = tokendirs.being();
tokeniser::const_iterator dirEnd = tokendirs.end();
for (; dir!= dirEnd && tokenfiles.size(); ++dir)
{
string files = join(tokenfiles); // i.e. get semicolon delimited
string.
string strDir(*dir);
findfile_sequence file_seq(strDir.c_str(), files.c_str(), ';',
findfile_sequence::files);
findfile_sequence::const_iterator foundFile = file_seq.begin();
findfile_sequence::const_iterator foundFileEnd = file_seq.End();
for (; foundFile!= foundFileEnd; ++foundFile)
{
string sFile((*foundFile).get_filename());
tokeniser:: const_iterator iFound =
find(tokenfiles.begin(),tokenfiles.end(),sFile);
if (iFound != tokenfiles.end())
tokefiles.erase(iFound); // this function is
helpful!!!
}
}
corrently , I split delimited string into vector for applying this way.
thanks
chang
Dec 05 2005









"Matthew" <matthew stlsoft.com> 