Все сталкиваются с ситуацией, когда нужно осуществить "тупой" (RAW) поиск множества ключевых слов (КК) по файлам.
Как я понял, это только у нас следователи называют экспертизой поиск по сотне а то и более ключевых слов... (найди то не знаю что а бы было за что посадить и дело заодно толстое...)
Вся беда, когда много ключевых слов, состоящих их символов кирилицы. При вводе каждого слова надо открывать дополнительную вкладку и там отмечать нужные кирилические кодовые страницы. Что очень долго...
Так вот ... может кому еще надо .... может кто не знает как ...
есть скрипт автоматизации данного процесса.
честно скомунизжено с саппорта (спасибо какому то китайцу) и модифицировано под кирилические CP 866 и ANSI1251 (кому надо больше - легко модифицирует скрипт).
РАБОТАЕТ ТОЛЬКО С ГЛОБАЛЬНЫМИ КЕЙВОРДАМИ!
Не знаю почему, объект, отвечающий за локальные КК кейса, является константой.
Или я не прав и кто-то меня поправит. По крайней мере так орет компилятор.
В принципе, гловабльные КК легко превращаются в локальные (экспорт-импорт).
Сначала заводим все кирилические КК как обычно (путем Add Keyword List). Потом используем на эти слова скрипт.
Так вот текст скрипта.
- Код: Выделить всё
//Updates selected keywords to the code pages as selected by the user
class MainClass;
class ChangeCodePageDialogClass: DialogClass {
MainClass m;
TreeTableEditClass kwtree;
CheckBoxClass cbOEMCyr866;
CheckBoxClass cbANSICyr;
ChangeCodePageDialogClass(MainClass main):
DialogClass(null, "Select keywords and Code Pages"),
kwtree(this, "Select keywords to change Code Page", START, START, 500, 200, 0, m.kwroot,
TreeTableEditClass::CANCHECK | TreeTableEditClass::CANCHECKFOLDER | TreeTableEditClass::CANINCLUDE | TreeTableEditClass::CANADDFOLDER |
TreeTableEditClass::CANADDNODE | TreeTableEditClass::CANEDITNODE | TreeTableEditClass::CANDUPENODE | TreeTableEditClass::CANDELETENODE |
TreeTableEditClass::CANDRAGNODE | TreeTableEditClass::CANCOPYNODE | TreeTableEditClass::CANRENAMENODE | TreeTableEditClass::CANVIEWNODES),
cbOEMCyr866(this, "Add Cyr 866", SAME, NEXT, DEFAULT, DEFAULT, 0, m.cp866),
cbANSICyr(this, "Add ANSI 1251", SAME, NEXT, DEFAULT, DEFAULT, 0, m.cp1251),
m = main
{
}
}
class MainClass {
KeywordClass kwroot;
bool cp866,
cp1251;
MainClass():
kwroot(),
cp866 = true,
cp1251 = true
{
}
void DlgSettings(uint storageOptions) {
StorageClass storeSettings("UpdateSelectedKWCodePages", storageOptions);
storeSettings.Value("cp866" , cp866);
storeSettings.Value("cp1251" , cp1251);
}
void Main(CaseClass c) {
DlgSettings(0);
uint ct;
kwroot.Copy(GlobalDataClass::KeywordRoot());
ChangeCodePageDialogClass changecp(this);
if (changecp.Execute() == SystemClass::OK) {
DlgSettings(StorageClass::WRITE);
SystemClass::ClearConsole();
forall (KeywordClass kw in kwroot) {
if (kw.IsSelected() && !kw.IsFolder()) {
ct++;
if (cp866)
kw.AddCodePage(866); //OEM866
if (cp1251)
kw.AddCodePage(1251); //ANSI1251
}
}
if (ct > 0)
if (GlobalDataClass::SetRoot(kwroot))
Console.WriteLine("Successfully updated " + ct + " selected keywords");
else
Console.WriteLine("Error: Could not update keywords");
else
Console.WriteLine("No keywords were selected");
}
}
}