這個工具通常用來去除小說或者字幕中的廣告。
比如以下一段文本:
BSTR實際上就是一個COM字符串,標準BSTR是一個有長度前綴和null結束符的OLECHAR數組。BSTR的前4字節是一個表示字符串長度的前綴。BSTR長度域的值是字符串的字節數,並且不包括0結束符
#include <comutil.h>
#include <string>
#pragma comment(lib, "comsuppw.lib")
//BSTR轉string
BSTR bstrText = ::SysAllocString(L"Test");
string str = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText);
//BSTR轉char*
BSTR bstrText = ::SysAllocString(L"Test");
char* lpszText = _com_util::ConvertBSTRToString(bstrText);
SysFreeString(bstrText);
delete[] lpszText;
//char*轉BSTR
char* lpszText = "Test";
BSTR bstrText = _com_util::ConvertStringToBSTR(lpszText);
//string轉BSTR
string str = "Test";
BSTR bstrText = _com_util::ConvertStringToBSTR(str);
指定字符爲“Str”,則包含Str的行都要去掉。
工具界面如圖:
核心代碼,很簡單,判斷字符串即可:
int CDllTestorDlg::ProceeOneFile(const _tstring& stFilePath, const _tstring& stToLookUp,const _tstring& stDstDir)
{
std::vector<_tstring> vContent, vContentNew;
size_t nLines = CStdFile::ParseTXTFile(stFilePath, vContent);
for (size_t j = 0; j < nLines; ++j)
{
_tstring stLine = vContent[j];
if ((m_cfg.bDelBlankLine && stLine.size() != 0 || !m_cfg.bDelBlankLine) && stLine.find(stToLookUp) == _tstring::npos)
{
vContentNew.push_back(stLine + _T('\n'));
}
}
_tstring stSavePath = stDstDir + CStdStr::GetNameOfFile(stFilePath);
CStdFile::SaveTXTFile(stSavePath, vContentNew);
return 0;
}
歡迎交流。