Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 7

Выделение слова из строки по начальным и конечным символам

25.09.2015, 06:58. Показов 5096. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Фрагменты текста:

1)
==List of IDs by ID Number==
{| class="sortable wikitable"
|-
!Item
!ID
|-
|[[Shades]]
|1
|-
|[[Work Jeans]]
|2
|-
|[[Orange Hoodie]]
|3
|-
|[[Eaglefire]]
|4
2)
*[[Hawkhound]]*= 109
*[[Rifle|Maple Rifle]]*= 474
* [[Rifle|Pine Rifle]]*= 480
* [[Sportshot]] = 484


Код:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
chcp 1251
@echo off
SetLocal EnableExtensions
cls
CD /d "%~dp0"
 
Set "infile=D:\Steam\steamapps\common\Unturned\Bundles\Bundles.txt"
 
for /F "tokens=* delims=" %%n in (%infile%) do (
  set str=%%n
  rem перенос строки в переменную для последующей обработки
  SetLocal EnableDelayedExpansion
  echo StringN :=: %%n
  set tst=!str:~1,1!
  rem выделение второго символа в строке
  echo tst     :=: !tst!
  if !tst! equ [ (
    set wrd=!str:~1!
    rem выделение искомого слова путём удаления первого символа
  )
  pause
  endlocal
)


Цель - Выделить слово формата [[word]] и присвоить его переменной wrd
Что есть - Скрипт выделяет слово, но топорным способом - отсекая первый символ, с последующей проверкой: "если символ эквивалентен [, то строка без первого символа | присваивается переменной"
Что нужно - Найти в строке слово начинающееся с [[ и заканчивающегося на ]] и передать его в переменную

Рассматриваю варианты с for, find, findstr (в частности с /r), но мозгов сделать это самому уже не хватает. Как это реализовать? (:
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.09.2015, 06:58
Ответы с готовыми решениями:

Определить, являются ли две клетки начальным и конечным положением одного хода
Клетка на шахматной доске определяется парой чисел. Определить, являются ли две клетки начальным и конечным положением одного хода: ...

Сравнение строк по их начальным символам
У нас есть файл с содержанием: 123|456 456|789 qwe|rty. В программу поступают данные qwe она должна вывести rty. Сравнивать...

Определить, являются ли две клетки начальным и конечным положением одного хода (шахматы)
Клетка на шахматной доске определяется парой чисел. Определить, являются ли две клетки начальным и конечным положением одного хода: a)...

11
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
25.09.2015, 10:35
hazestalker, Так устроит?:
Windows Batch file
1
2
3
4
5
6
@echo on
set "infile=%Userprofile%\Desktop\1.txt" 
for /f "usebackq  delims=" %%i in (`find /n /v "" %infile% ^| find "[[word]]"`) do (set str=%%i)
for /f "delims=[[]] tokens=2" %%i in ("%str%") do (set wrd=%%i) 
echo %wrd%
pause
- сохранить в кодировке 866.
0
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 7
25.09.2015, 11:26  [ТС]
Забыл уточнить. Мой скрипт предназначен для первого фрагмента текста, но должен работать и со вторым, т.е. именно находить слово в строке независимо от его положения

alpap, слово word в [[word]] может быть любым, его как раз и нужно найти. И там может быть не одно слово
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
25.09.2015, 11:42
hazestalker, И, в чем проблема, возьмите его в переменную:
Windows Batch file
1
2
3
4
5
6
7
@echo on
set "infile=%Userprofile%\Desktop\1.txt"
set "words=word"
for /f "usebackq  delims=" %%i in (`find /n /v "" %infile% ^| find "[[%words%]]"`) do (set str=%%i)
for /f "delims=[[]] tokens=2" %%i in ("%str%") do (set wrd=%%i) 
echo %wrd%
pause
.
0
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 7
25.09.2015, 11:54  [ТС]
alpap, слово неизвестно и мне его нужно получить. Зачем туда ставить переменную?
Если писать на JS, то мне нужно из \[\[[^\]]*\]\] выделить эту [^\]]* часть и присвоить|передать переменной
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
25.09.2015, 11:58
Цитата Сообщение от hazestalker Посмотреть сообщение
Что нужно - Найти в строке слово начинающееся с [[ и заканчивающегося на ]] и передать его в переменную
- не пойму я Вас, и тогда, проще не через bat это делать.
0
 Аватар для ComSpec
3463 / 2001 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
26.09.2015, 10:10
Цитата Сообщение от hazestalker Посмотреть сообщение
мне нужно из \[\[[^\]]*\]\] выделить эту [^\]]* часть и присвоить|передать переменной
.



Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
 
set "infile=D:\Steam\steamapps\common\Unturned\Bundles\Bundles.txt"
set "start=[["
set "end=]]"
 
for /f "usebackq delims=" %%i in ("%infile%") do (
 for /f "tokens=2 delims=$" %%j in ('
  cmd/v/c set "str=%%i"^^^& set "str=!str:%start%=#$!"^^^& echo "!str:%end%=$#!"
 ') do (
  set wrd=%%~j
  cmd/v/c echo.!wrd!
  pause
 )
)
.
3
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 7
30.09.2015, 07:04  [ТС]
ComSpec, уже то, но надо доработать.
Пропуск строк убрать, проверять нужно будет все, т.к. во втором случае наименования не фиксированы и записываться в новый файл будут все строки, в том числе неизменённые.
Если в строке нет символа [, то она просто записывается, иначе выделяется слово, с последующей заменой на слово-замену из списка. Эта часть готова за исключением проверки наличия символа [ в строке.
0
0 / 0 / 0
Регистрация: 12.08.2015
Сообщений: 7
02.10.2015, 11:46  [ТС]
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
chcp 1251
@echo off
SetLocal EnableExtensions
cls
CD /d "%~dp0"
 
Set "infile=D:\Steam\steamapps\common\Unturned\Bundles\Bundles.txt"
set "smb=[["
 
for /F "tokens=* delims=" %%n in (%infile%) do (
  set str=%%n
SetLocal EnableDelayedExpansion
  echo "%%n" | findstr /r /c:"\[\[[^\]]*\]\]" > NUL
  rem передача строки %%n в команду findstr, которая ищет слово через RegExp
  IF NOT ERRORLEVEL 1 (
  rem если слово по регулярному выражению найдено, то
    for /f "delims=]" %%a in ("%%n") do (
    rem через for захватываем левую часть строки - до скобки ]
      set "ln=%%a"
      rem передаём результат в переменную
      set "wrd=[[!ln:*%smb%=!]]"
      rem убираем из оставшейся строки часть до скобок [[ включительно, тем самым оставляя
      rem только слово, которое снова оборачиваем в скобки и заносим в переменную
    )
  )
 
endlocal
)
В итоге скрипт выделяет из строки слово из скобок [[word]] и передаёт его в переменную wrd.

Хитрость с IF NOT ERRORLEVEL 1 для findstr ... > NUL.
Идеально было бы сразу передавать результат из findstr в переменную, без всяких for и set, но я не знаю как это сделать.
Тут можно глянуть результат работы полного скрипта. Возникают проблемы со строками
*[[Rifle|Maple Rifle]] = 474
*[[Rifle|Birch Rifle]] = 479
*[[Rifle|Pine Rifle]] = 480
так как основное имя статьи находится слева, а имя для сопоставления ID справа
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
04.11.2015, 20:18
hazestalker, И все-таки так работает:
Windows Batch file
1
2
3
4
5
6
7
8
9
@echo on
SetLocal EnableDelayedExpansion
set "infile=D:\Steam\steamapps\common\Unturned\Bundles\Bundles.txt" 
for /f "delims=" %%i in ('findstr "[[" "%infile%"') do (
 for /f "tokens=2 delims=[[]] " %%j in ("%%~i") do (
  set wrd=%%j 
  echo !wrd!
))
pause
.
0
90 / 84 / 42
Регистрация: 27.09.2015
Сообщений: 316
05.11.2015, 11:21
Очевидно - нет.. пробелы за сепаратор зачем включать? ;))

Цитата Сообщение от hazestalker
Идеально было бы сразу передавать результат из findstr в переменную, без всяких for и set, но я не знаю как это сделать.
Это так важно? О_о
set - Отображает, устанавливает или избавляет cmd.exe от переменных среды
for - Запускает специфическую комманду для каждого файла в наборе файлов
findstr - Поиск для строк в файлах
Если вам хочется установить переменную не используя set, то вам сюда
Установить переменную без for можно, но я не помню как + в этом случае в переменной окажется вся строка, а не только искомое слово, т.е. если у вас имеется строка типа "| [[map|frfrfr]] abra kadabra",то в переменной окажется
| [[map|frfrfr]] abra kadabra
Windows Batch file
1
2
3
4
5
6
@echo off
setlocal enabledelayedexpansion
for /f "tokens=2 delims=[]" %%t in ('findstr [[ D:\Steam\steamapps\common\Unturned\Bundles\Bundles.txt ^|findstr ]]') do (
set "wrd=%%t"
echo:!wrd!
)

Не по теме:

спагетти

0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
05.11.2015, 23:37
mir16, Пробел случайно, должно быть так в 5й строке:
Windows Batch file
1
for /f "tokens=2 delims=[[]]" %%j in ("%%~i") do (
а в остальном работает как надо с обеими представленными файлами, вот скрины, если еще не верится сначала проверяют потом утверждают:
, .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.11.2015, 23:37
Помогаю со студенческими работами здесь

Найти слова, длина которых равна 5 символам, и удалить их из строки
Здравствуйте. Помогите, пожалуйста, решить следующую задачу. Задана строка-предложение. Необходимо найти слова, длина которых равна 5...

строки (напечатать все слова,которые совпадают с начальным отрезком латинского алфавита
строки (напечатать все слова,которые совпадают с начальным отрезком латинского алфавита) Ребята,нужна помощь!!) Дана строка,которая...

Напечатать слова, отличные от последнего слова, совпадающие с конечным отрезком латинского алфавита
задача следующая : задача по теме обработки строк, поэтому соответственно использовать множества нельзя...

Выделение слова. Строки
Написать программу выделения последнего слова из введенной строки и отображение его на экране. Помогите, пожалуйста.

Выделение слова из строки в списке
Как из строки находязейся в контейнере STL list выделить слово? условие задачки: /*Примечание. Во всех вариантах этого задания...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru