1. @Echo off
  2. cls
  3. @rem
  4. @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++"
  5. @rem "                Bat-файл 'prc-OR.bat'                "
  6. @rem "                                                     "
  7. @rem "Обработка текущей строки 'string' запроса из файла   "
  8. @rem "'stages.txt', которая содержит логический(ие)        "
  9. @rem "оператор(ы) 'OR' (ИЛИ).                              "
  10. @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++"
  11. @rem
  12. @rem "Вход 1: файл 'string' со строкой из файла            "
  13. @rem "'stages.txt'.                                        "
  14. @rem
  15. @rem "Вход 2: файл 'currdb' с текущей выборкой из БД       "
  16. @rem "'radar' журнальных публикаций ЭБ IEEE Xplore         "
  17. @rem
  18. @rem "Выход: обновленный 'текущий' файл БД 'currdb'        "
  19. @rem
  20. @rem =======================================================
  21. @rem
  22. if exist notfound goto CLEAN
  23. @rem
  24. type num_string
  25. nircmd wait 1500
  26. @rem
  27. @rem -------------------------------------------------------
  28. @rem "Обрабатываем файл 'string':                          "
  29. @rem "1. множественные пробелы заменяются на одиночные;    "
  30. @rem "2. удаляются пробелы в начале строки;                "
  31. @rem "3. удаляются все кавычки;                            "
  32. @rem "4. Например, из строки вида                          "
  33. @rem "meteorol{10} OR (dual-polarization){12} OR (dual polarization){12}"
  34. @rem "формируются три строки:                              "
  35. @rem "meteorol;10                                          "
  36. @rem "dual-polarization;12                                 "
  37. @rem "dual polarization;12                                 "
  38. @rem "Здесь в первом поле, разделенном ";" - искомые       "
  39. @rem "термины (слова, словосочетания, аббревиатуры),       "
  40. @rem "а '10' и '12'  - номера  полей БД, в которых эти     "
  41. @rem "термины ищутся                                       "
  42. @rem
  43. sed "s/  */ /g" <string >temp\zub01
  44. sed "s/OR/\r\n/g" <temp\zub01 >temp\zub02
  45. sed "s/^  *//" <temp\zub02 >temp\zub03
  46. sed "s/{/;{/g" <temp\zub03 >temp\zub04
  47. sed "s/[{}()\x22\x93\x94\xAB\xBB]//g;s/$/\r/" <temp\zub04 >temp\zub05
  48. @rem
  49. @rem -------------------------------------------------------
  50. @rem "Строки сортируются по возрастанию по номеру поля БД  "
  51. sort -k 2.1,2.2 -t; <temp\zub05 >temp\zub06
  52. @rem
  53. @rem -------------------------------------------------------
  54. @rem "Удаляются пробелы в конце строк, вставляются переносы"
  55. @rem "строк                                                "
  56. sed "s/  *$//;s/$/\r/" <temp\zub06 >temp\zub07
  57. @rem
  58. @rem "~~~~~~~~~~~~~~~~~~~~ НАЧАЛО ЦИКЛА ~~~~~~~~~~~~~~~~~~~"
  59. @rem
  60. @rem "ЦИКЛ по строкам файла 'temp\zub07'                   "
  61. @rem                                                      
  62. @rem "Сначала из файла 'currdb' извлекаются записи,        "
  63. @rem "содержащие в реферате (поле 10 БД 'radar') слово     "
  64. @rem "'meteorol'. Затем из файла 'currdb' извлекаются      "
  65. @rem "записи, содержащие термин 'dual-polarization'        "
  66. @rem "в поле 12. После чего извлекаются записи, содержащие "
  67. @rem "термин 'dual polarization' в поле 12.                "
  68. @rem "Полученные результаты поиска последовательно         "
  69. @rem "записываются в файл 'temp\zub12'                     "
  70. @rem
  71. if exist temp\zub12 del /Q temp\zub12
  72. @rem
  73. FOR /F "delims=" %%i IN (temp\zub07) DO (
  74. echo %%i>temp\zub08
  75. cut -f1 -d; <temp\zub08 >temp\zub09
  76. cut -f2 -d; <temp\zub08 >temp\zub10
  77. sed "s/^\(.*\)$/cut -f1,\1 <currdb >temp\\zub11/" <temp\zub10 >ztmp2.bat
  78. CALL ztmp2.bat
  79. fgrep -f temp\zub09 -i <temp\zub11 >>temp\zub12
  80. )
  81. @rem "~~~~~~~~~~~~~~~~~~ ОКОНЧАНИЕ ЦИКЛА ~~~~~~~~~~~~~~~~~~"
  82. @rem
  83. @rem "'Суммарный' файл 'temp\zub12' подготавливается       "
  84. @rem "к сортировке по порядковому номеру записи:           "
  85. @rem "к номерам, меньшим 5-значного числа добавляется      "
  86. @rem "необходимое число нулей                              "
  87. sed "/^\x22[0-9]\{1\}\t/s/\x22/\x220000/" <temp\zub12 >temp\zub13-1
  88. sed "/^\x22[0-9]\{2\}\t/s/\x22/\x22000/" <temp\zub13-1 >temp\zub13-2
  89. sed "/^\x22[0-9]\{3\}\t/s/\x22/\x2200/" <temp\zub13-2 >temp\zub13-3
  90. sed "/^\x22[0-9]\{4\}\t/s/\x22/\x220/" <temp\zub13-3 >temp\zub13-4
  91. @rem
  92. @rem -------------------------------------------------------
  93. @rem "Сортировка по 5-значному порядковому номеру          "
  94. @rem "и удаление дубликатов записей.                       "
  95. @rem "5-значный номер объяснется максимальным числом       "
  96. @rem "записей 28496 в БД 'radar' журнальных статей         "
  97. cmsort /D /N=2,6 temp\zub13-4 temp\zub14
  98. cls
  99. nircmd wait 500
  100. @rem
  101. @rem "Удаление незначащих нулей в начале порядкового       "
  102. @rem "номера                                               "
  103. sed "s/^\x2200*/\x22/" <temp\zub14 >temp\zub15
  104. @rem
  105. @rem --------------------------------------------
  106. @rem "Обновляем текущий файл 'currdb'                      "
  107. @rem
  108. cut -f1 <temp\zub15 >temp\zub16
  109. sed "s/$/\t\r/" <temp\zub16 >temp\zub17
  110. fgrep -f temp\zub17 <currdb >temp\zub18
  111. copy /Y temp\zub18 currdb >null
  112. @rem
  113. @rem -------------------------------------------------------
  114. @rem "Выводим число найденных записей                      "
  115. @rem
  116. sed -n "$=" <currdb >temp\zub19
  117. set Size=0
  118. set Files=temp\zub19
  119. for %%F in (%Files%) do if /i %%~zF EQU %Size% del /f %%F
  120. if exist temp\zub19 goto METKA1
  121. echo ЏгЎ«ЁЄ жЁ© ­Ґ ­ ©¤Ґ­® >temp\zub21
  122. echo >notfound
  123. goto METKA2
  124. :METKA1
  125. sed "s/^\(.*\)$/Ќ ©¤Ґ­® ЇгЎ«ЁЄ жЁ©: \1\r/" <temp\zub19 >temp\zub20
  126. crecode -wd temp\zub20 temp\zub21
  127. cls
  128. :METKA2
  129. cls
  130. type num_string
  131. type temp\zub21
  132. if not exist notfound echo Џа®¬Ґ¦гв®з­л© १г«мв в § ЇЁб ­ ў Ї ЇЄг 'stgs'
  133. nircmd wait 2000
  134. @rem
  135. @rem
  136. @rem -------------------------------------------------------
  137. :CLEAN
  138. @rem "Удаление временных файлов                            "
  139. @rem
  140. if exist num_string del /Q num_string
  141. if exist null del /Q null
  142. if exist temp\zub* del /Q temp\zub*
  143. if exist ztmp2.bat del /Q ztmp2.bat
  144. @rem
  145. @rem -------------------------------------------------------
  146. @rem "Выход из bat-файла                                   "
  147. :END