@Echo off
cls
@rem
@rem
"+++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem
" Bat-файл 'prc-OR.bat' "
@rem
" "
@rem
"Обработка текущей строки 'string' запроса из файла "
@rem
"'stages.txt', которая содержит логический(ие) "
@rem
"оператор(ы) 'OR' (ИЛИ). "
@rem
"+++++++++++++++++++++++++++++++++++++++++++++++++++++"
@rem
@rem
"Вход 1: файл 'string' со строкой из файла "
@rem
"'stages.txt'. "
@rem
@rem
"Вход 2: файл 'currdb' с текущей выборкой из БД "
@rem
"'radar' журнальных публикаций ЭБ IEEE Xplore "
@rem
@rem
"Выход: обновленный 'текущий' файл БД 'currdb' "
@rem
@rem =======================================================
@rem
if
exist notfound goto CLEAN
@rem
type
num_string
nircmd wait 1500
@rem
@rem -------------------------------------------------------
@rem
"Обрабатываем файл 'string': "
@rem
"1. множественные пробелы заменяются на одиночные; "
@rem
"2. удаляются пробелы в начале строки; "
@rem
"3. удаляются все кавычки; "
@rem
"4. Например, из строки вида "
@rem
"meteorol{10} OR (dual-polarization){12} OR (dual polarization){12}"
@rem
"формируются три строки: "
@rem
"meteorol;10 "
@rem
"dual-polarization;12 "
@rem
"dual polarization;12 "
@rem
"Здесь в первом поле, разделенном "
;
" - искомые "
@rem
"термины (слова, словосочетания, аббревиатуры), "
@rem
"а '10' и '12' - номера полей БД, в которых эти "
@rem
"термины ищутся "
@rem
sed
"s/ */ /g"
<string >temp\zub01
sed
"s/OR/\r\n/g"
<temp\zub01 >temp\zub02
sed
"s/^ *//"
<temp\zub02 >temp\zub03
sed
"s/{/;{/g"
<temp\zub03 >temp\zub04
sed
"s/[{}()\x22\x93\x94\xAB\xBB]//g;s/$/\r/"
<temp\zub04 >temp\zub05
@rem
@rem -------------------------------------------------------
@rem
"Строки сортируются по возрастанию по номеру поля БД "
sort
-k 2.1,2.2 -t; <temp\zub05 >temp\zub06
@rem
@rem -------------------------------------------------------
@rem
"Удаляются пробелы в конце строк, вставляются переносы"
@rem
"строк "
sed
"s/ *$//;s/$/\r/"
<temp\zub06 >temp\zub07
@rem
@rem
"~~~~~~~~~~~~~~~~~~~~ НАЧАЛО ЦИКЛА ~~~~~~~~~~~~~~~~~~~"
@rem
@rem
"ЦИКЛ по строкам файла 'temp\zub07' "
@rem
@rem
"Сначала из файла 'currdb' извлекаются записи, "
@rem
"содержащие в реферате (поле 10 БД 'radar') слово "
@rem
"'meteorol'. Затем из файла 'currdb' извлекаются "
@rem
"записи, содержащие термин 'dual-polarization' "
@rem
"в поле 12. После чего извлекаются записи, содержащие "
@rem
"термин 'dual polarization' в поле 12. "
@rem
"Полученные результаты поиска последовательно "
@rem
"записываются в файл 'temp\zub12' "
@rem
if
exist temp\zub12 del /Q temp\zub12
@rem
FOR /F
"delims="
%%i IN (temp\zub07) DO (
echo
%%i>temp\zub08
cut
-f1 -d; <temp\zub08 >temp\zub09
cut
-f2 -d; <temp\zub08 >temp\zub10
sed
"s/^\(.*\)$/cut -f1,\1 <currdb >temp\\zub11/"
<temp\zub10 >ztmp2.bat
CALL ztmp2.bat
fgrep
-f temp\zub09 -i <temp\zub11 >>temp\zub12
)
@rem
"~~~~~~~~~~~~~~~~~~ ОКОНЧАНИЕ ЦИКЛА ~~~~~~~~~~~~~~~~~~"
@rem
@rem
"'Суммарный' файл 'temp\zub12' подготавливается "
@rem
"к сортировке по порядковому номеру записи: "
@rem
"к номерам, меньшим 5-значного числа добавляется "
@rem
"необходимое число нулей "
sed
"/^\x22[0-9]\{1\}\t/s/\x22/\x220000/"
<temp\zub12 >temp\zub13-1
sed
"/^\x22[0-9]\{2\}\t/s/\x22/\x22000/"
<temp\zub13-1 >temp\zub13-2
sed
"/^\x22[0-9]\{3\}\t/s/\x22/\x2200/"
<temp\zub13-2 >temp\zub13-3
sed
"/^\x22[0-9]\{4\}\t/s/\x22/\x220/"
<temp\zub13-3 >temp\zub13-4
@rem
@rem -------------------------------------------------------
@rem
"Сортировка по 5-значному порядковому номеру "
@rem
"и удаление дубликатов записей. "
@rem
"5-значный номер объяснется максимальным числом "
@rem
"записей 28496 в БД 'radar' журнальных статей "
cmsort /D /N=2,6 temp\zub13-4 temp\zub14
cls
nircmd wait 500
@rem
@rem
"Удаление незначащих нулей в начале порядкового "
@rem
"номера "
sed
"s/^\x2200*/\x22/"
<temp\zub14 >temp\zub15
@rem
@rem --------------------------------------------
@rem
"Обновляем текущий файл 'currdb' "
@rem
cut
-f1 <temp\zub15 >temp\zub16
sed
"s/$/\t\r/"
<temp\zub16 >temp\zub17
fgrep
-f temp\zub17 <currdb >temp\zub18
copy /Y temp\zub18 currdb >null
@rem
@rem -------------------------------------------------------
@rem
"Выводим число найденных записей "
@rem
sed
-n
"$="
<currdb >temp\zub19
set
Size=0
set
Files=temp\zub19
for
%%F
in
(%Files%)
do
if
/i %%~zF EQU %Size% del /f %%F
if
exist temp\zub19 goto METKA1
echo
ЏгЎ«ЁЄ жЁ© Ґ ©¤Ґ® >temp\zub21
echo
>notfound
goto METKA2
:METKA1
sed
"s/^\(.*\)$/Ќ ©¤Ґ® ЇгЎ«ЁЄ жЁ©: \1\r/"
<temp\zub19 >temp\zub20
crecode -wd temp\zub20 temp\zub21
cls
:METKA2
cls
type
num_string
type
temp\zub21
if
not exist notfound
echo
Џа®¬Ґ¦гв®зл© аҐ§г«мв в § ЇЁб ў Ї ЇЄг
'stgs'
nircmd wait 2000
@rem
@rem
@rem -------------------------------------------------------
:CLEAN
@rem
"Удаление временных файлов "
@rem
if
exist num_string del /Q num_string
if
exist null del /Q null
if
exist temp\zub* del /Q temp\zub*
if
exist ztmp2.bat del /Q ztmp2.bat
@rem
@rem -------------------------------------------------------
@rem
"Выход из bat-файла "
:END