![]() |
Выделить часть строки и отправить в переменную
Здравствуйте, подскажите какие способы есть отправить в переменную часть строки?
Например строка Код:
fast slow error password error garbage test text blabla флагом будет слово error меду которыми находиться нужная информация. Какие варианты есть? FOR такой делимитер можно подсунуть? Или findstr регуляркой какой нибудь можно вытащить? Делимитер очень желательно слово или ряд символов. Например ### |
допустим так, хоть и не коротко:
Код:
@echo off кстати подобное PoSh сделает на ура и моргнуть не успеете. |
Спасибо, пока правда ничего не понятно. Но я назову все переменные "говорящими" для меня названиями и за пару дней осилю.
Насчёт PoSh давно уже думаю но нет у меня пока условий дотошно учиться. Увы. |
Цитата:
- вашу строку бьем по пробелу и в файл - даем номера строкам - выбираем номера строк с нужным тегом - забираем строку с номером между найденных номеров выше и помещаем в переменную ничего сложного, но букафф много :) |
конкретно для вашего случая (в смысле поиск слова в предложении между двумя одинаковыми тегами) и без временного файла
(можно и еще короче, но пойдет и так, так понятнее, хотя смотря для кого) Код:
@echo off |
Цитата:
В пароле не должно быть пробелов Код:
@Echo Off |
вот короче
вторичным тегом выступает = , можно назначить свой, если такой символ будет неуместен по тексту (в смысле присутствует уже) Код:
@echo off |
Круть! Спасибо. Чувствую я так и профессором "батаники" стану.
Я плашку решено пока не буду ставить так как мне возможно понадобятся подсказки. Поставлю чуть позже. Спасибо. |
alpap, Краткость, несомненно, сестра таланта :) Но если текст будет вида "error password error garbage test text blabla" либо "fast slow error password error" Ваш батник отработает неверно.
Предлагаю длиннее, но с учетом этих имхо возможных случаев. Как и у Вас, батник работает в предположении, что между error и password не более одного пробела
Код:
@Echo Off В качестве вспомогательного разделителя я здесь указал ё, естественно, можно указать любой допустимый. Set "Dlm=ё" Однако, реально я тестировал батник с символом, который на клавиатуре пользователь, не обременённый излишними знаниями, не введёт. Например, символ ASCII с десятичным кодом 177. Я не смог разместить на форуме батник с этим символом (ломается весь текст сообщения), поэтому вынужденно указал ё. Опять же, имхо выделение пароля - не основная цель в неизвестном нам батнике, поэтому я это оформил в виде процедуры, чтобы не загромождать основной текст кода Простите, если излагаю известное
Чтобы вставить в текст символ ASCII с определённым десятичным кодом, надо на цифровой клавиатуре, удерживая клавишу Alt, набрать нужный код
|
Цитата:
|
Здравствуйте ещё раз. Я посидел над вашими решениями, понял принципы и способы реализации и наконец то сдвинулся с места.
Спасибо вам большое. Теперь у меня очередная "глупая" проблема: я ищу строки в текстовом файле и в них ищу пароль. Проблема что в файле может быть несколько паролей из которых мне нужен только первый. А он перезаписывается. Существует ли какой либо способ выйти из FOR после того как результат получен? Как нибудь так? Код:
for /f "tokens=2 delims=###" %%c in ("data.txt") do ( Как прекратить FOR когда var дефайнет? |
я ищу строки в текстовом файле и в них ищу пароль между двумя определёнными одинаковыми словами.
Код:
@Echo Off то есть символ ASCII с десятичным кодом 177. Set "Dlm=▒" естественно, можно указать любой допустимый, но гарантированно отсутствующий в тексте |
И снова спасибо! Выручаете. Сейчас буду разбираться что да как.
|
Цитата:
Кстати, в посте #9 я накосячил: строка вида fast slow error password garbage test text blabla обрабатывалась неверно. Исправил. |
Спасибо большое. С ваше помощью я понял как надо всё делать и всё таки собрал своего Франкинштейна.
Теперь у меня проблемы с кодировками. Я работаю с информацией скачиваемой и загружаемой с/на сайт и пока всё на английском всё отлично а с русским местами проблемы. Боюсь опять придётся просить помощи. Насчёт разделителя вы правы одного уникального символа достаточно. И работать с ним гораздо легче. Ещё раз спасибо. |
Patroklos,
Если текст в 1251 кодировке и батник сохранить в 1251 кодировке, вроде бы так работает
Код:
@Echo Off |
Проблема не в той части где ваш код. Там всё отлично.
Я беру полученную переменную, подставляю её в json строку и при помощи curl передаю её на сервер. и тут возникает проблема. Пока всё на английском всё супер. С русским проблемы. Если я определяю переменную в ручную в файле Код:
set var=русский текст та работать отказывается. Сервер ругается на какой то нуль байт в кодировке. Я уже в ручную все возможные кодировки перебрал. И chcp и кодировки файла и в curl настройки. И увы пока глухо. Назавтра свежим взглядом взгляну может придумаю чего. |
Patroklos
не надо перебирать кодировки, вы хозяин положения и доступ есть ко всем файлам. Сохраняйте все (совсем все и текстовые и bat) в кодировке 866, проблем поубавится, особенно если замените топорный виндовый блокнот на что-то стОящее. |
Цитата:
Цитата:
Сам файл прост как гвоздь проблема именно с кодировками. Код:
chcp 1251 Всем спасибо большое за помощь. Я многому научился на ваших примерах. Ставлю теме решено так как извлекать инфу по делиму я с вашей помощью научился. |
Время: 04:07. |
Время: 04:07.
© OSzone.net 2001-