1. @Echo off
  2. cls
  3. @rem
  4. @rem "+++++++++++++++++++++++++++++++++++++++++++++++++++++"
  5. @rem "               Bat-файл 'prc-AND.bat'                "
  6. @rem "                                                     "
  7. @rem "Обработка текущей строки 'string' запроса из файла   "
  8. @rem "'stages.txt', которая содержит логический(ие)        "
  9. @rem "оператор(ы) 'AND' (И).                               "
  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. из строки запроса 'string' вида                   "
  33. @rem "radar{2} AND polari{2} AND (X-band){10}              "
  34. @rem "формируются следующие строки:                        "
  35. @rem "radar;2                                              "
  36. @rem "polari;2                                             "
  37. @rem "X-band;10                                            "
  38. @rem "Здесь в первом столбце - искомые термины и слова,    "
  39. @rem "а '2' и '10' - номера полей БД, в которых эти термины"
  40. @rem "(слова) ищутся.                                      "
  41. @rem
  42. sed "s/  */ /g" <string >temp\zua01
  43. sed "s/AND/\r\n/g" <temp\zua01 >temp\zua02
  44. sed "s/^  *//" <temp\zua02 >temp\zua03
  45. sed "s/{/;{/g" <temp\zua03 >temp\zua04
  46. sed "s/[{}()\x22\x93\x94\xAB\xBB]//g;s/$/\r/" <temp\zua04 >temp\zua05
  47. @rem
  48. @rem "~~~~~~~~~~~~~~~~~~~~ НАЧАЛО ЦИКЛА ~~~~~~~~~~~~~~~~~~~"
  49. @rem
  50. @rem "ЦИКЛ по строкам файла 'temp\zua05'                   "
  51. @rem
  52. @rem "Например, для строки 'radar;2' из 2-го поля БД       "
  53. @rem "('Название публикации') текущего файла 'currdb'      "
  54. @rem "извлекаются записи, содержащие термин 'radar'.       "
  55. @rem
  56. @rem "В результате ЦИКЛА формируется обновленный           "
  57. @rem "файл 'currdb'.                                       "
  58. @rem
  59. FOR /F "delims=" %%i IN (temp\zua05) DO (
  60. echo %%i>temp\zua06
  61. cut -f2 -d; <temp\zua06 >temp\zua07
  62. tr -d " [:alpha:][:punct:]" <temp\zua07 >temp\zua08
  63. sed "s/^\(.*\)$/cut -f1,\1 <currdb >temp\\zua10/" <temp\zua08 >ztmp1.bat
  64. CALL ztmp1.bat
  65. cut -f1 -d; <temp\zua06 >temp\zua11
  66. fgrep -i -f temp\zua11 <temp\zua10 >temp\zua12
  67. cut -f1 <temp\zua12 >temp\zua13
  68. sed "s/$/\t\r/" <temp\zua13 >temp\zua14
  69. fgrep -i -f temp\zua14 <currdb >temp\zua15
  70. copy /Y temp\zua15 currdb >null
  71. )
  72. @rem "~~~~~~~~~~~~~~~~~~ ОКОНЧАНИЕ ЦИКЛА ~~~~~~~~~~~~~~~~~~"
  73. @rem
  74. @rem "Выводим число найденных записей.                     "
  75. @rem
  76. sed -n "$=" <currdb >temp\zua16
  77. set Size=0
  78. set Files=temp\zua16
  79. for %%F in (%Files%) do if /i %%~zF EQU %Size% del /f %%F
  80. if exist temp\zua16 goto METKA1
  81. echo ЏгЎ«ЁЄ жЁ© ­Ґ ­ ©¤Ґ­® >temp\zua18
  82. echo >notfound
  83. goto METKA2
  84. :METKA1
  85. sed "s/^\(.*\)$/Ќ ©¤Ґ­® ЇгЎ«ЁЄ жЁ©: \1\r/" <temp\zua16 >temp\zua17
  86. crecode -wd temp\zua17 temp\zua18
  87. cls
  88. :METKA2
  89. cls
  90. type num_string
  91. type temp\zua18
  92. if not exist notfound echo Џа®¬Ґ¦гв®з­л© १г«мв в § ЇЁб ­ ў Ї ЇЄг 'stgs'
  93. nircmd wait 2000
  94. @rem
  95. @rem -------------------------------------------------------
  96. :CLEAN
  97. @rem "Удаление временных файлов                            "
  98. @rem
  99. if exist num_string del /Q num_string
  100. if exist null del /Q null
  101. if exist temp\zua* del /Q temp\zua*
  102. if exist ztmp1.bat del /Q ztmp1.bat
  103. @rem
  104. @rem -------------------------------------------------------
  105. @rem "Выход из bat-файла.                                  "
  106. :END