|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Замена строк в файле по признаку и маске |
|
|
CMD/BAT - Замена строк в файле по признаку и маске
|
Новый участник Сообщения: 10 |
Профиль | Отправить PM | Цитировать Добрый день!
Есть файл с содержимым вида: 61400013.68F 61400013.69F 61400013.70F 61400013.71F 61400048.51F 61400048.52F 61400070.16F 61400070.17F 61400070.18F 61400070.19F 61400215.23F 61400215.24F 61400215.25F Если не смотреть на точки и букву F, то видно, что это просто увеличивающиеся числа, но они как бы разбиты на диапазоны роста 1 61400013.68F 61400013.69F 61400013.70F 61400013.71F 2 61400048.51F 61400048.52F 3 61400070.16F 61400070.17F 61400070.18F 61400070.19F 4 61400215.23F 61400215.24F 61400215.25F В каждой строке всегда присутствует точка и буква F Суть проблемы: Надо в каждом диапазоне заменить все строки, КРОМЕ последней на вид: [задаваемая маска]61400013.68F [задаваемая маска]61400013.69F [задаваемая маска]61400013.70F [задаваемая маска два]61400013.71F[задаваемая маска три] таким образом: исходное состояние: 61400013.68F 61400013.69F 61400013.70F 61400013.71F 61400048.51F 61400048.52F 61400070.16F 61400070.17F 61400070.18F 61400070.19F 61400215.23F 61400215.24F 61400215.25F конечное состояние: [задаваемая маска]61400013.68F [задаваемая маска]61400013.69F [задаваемая маска]61400013.70F [задаваемая маска два]61400013.71F[задаваемая маска три] [задаваемая маска]61400048.51F [задаваемая маска два]61400048.52F[задаваемая маска три] [задаваемая маска]61400070.16F [задаваемая маска]61400070.17F [задаваемая маска]61400070.18F [задаваемая маска два]61400070.19F[задаваемая маска три] [задаваемая маска]61400215.23F [задаваемая маска]61400215.24F [задаваемая маска два]61400215.25F[задаваемая маска три] Очень прошу помощи!!! |
|
Отправлено: 07:04, 12-09-2015 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 08:38, 12-09-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Да, это считается диапазоном одного типа.
Переход на другой диапазон происходит при разрыве в счете больше заданной пользователем величины. Т.е. два диапазона будут выглядеть так: задается разрыв = 5 и 61400013.97F 61400013.98F 61400013.99F 61400014.00F 61400014.01F 61400014.06F 61400014.07F 61400014.08F Приведен пример двух диапазонов. |
Отправлено: 10:00, 12-09-2015 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Количество цифр до точки — всегда строго равно восьми символам? А после точки — строго двум и одной букве?
|
Отправлено: 11:29, 12-09-2015 | #4 |
Ветеран Сообщения: 1754
|
|
|
Отправлено: 11:34, 12-09-2015 | #5 |
Новый участник Сообщения: 10
|
Профиль | Отправить PM | Цитировать Да, формат строк - неизменен.
Приведенный пример у меня не сработал, файл не изменился. |
Отправлено: 11:48, 12-09-2015 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать У меня сработал, кроме одного — в результирующем файле отсутствуют первоначальные значения между «[mask2]» и «[mask3]» . Т.е, на исходном примере выходит (PowerShell 2.0):
Скрытый текст
ВиталийВ, коли у Вас так — выкладывайте Ваш файл, упаковав его в архив (прикрепив последний к сообщению, либо выложив на RGhost). И последний вопрос — к какому случаю следует относить «диапазон» из одной строки — к «маска1» или «маска2+маска3»? |
Отправлено: 12:34, 12-09-2015 | #7 |
Ветеран Сообщения: 1754
|
Цитата Iska:
Не видит $group[-1], значит надо заменить на $group[$group.count-1] |
|
Отправлено: 13:06, 12-09-2015 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Foreigner, с указанным изменением отработало корректно. Ждём теперь архив с файлом от автора (хотя не представляю навскидку, что там может не работать).
|
Отправлено: 13:24, 12-09-2015 | #9 |
Ветеран Сообщения: 874
|
Профиль | Отправить PM | Цитировать Код пакетного файла:
@echo off setlocal set "file=C:\Test\example.txt" set "text_1=[задаваемая маска]" set "text_2=[задаваемая маска два]" set "text_3=[задаваемая маска три]" for /f %%i in ('"type "%file%"& del "%file%""') do ( set x=%%i call set x=%%x:~1,-1%% call set x=%%x:.=%% set/a y+=1 for /f "tokens=1,2 delims=*" %%j in (' "set/a x& <nul set/p=*& set/a y" ') do ( if defined z ( if %%j equ %%k ( call set "string=%text_1%%%z%%" ) else ( call set "string=%text_2%%%z%%%text_3%" set blank=true ) ) ) >>"%file%" ( if defined string cmd/v/c echo !string! if defined blank echo.& set blank= ) set/a y=x set z=%%i ) >>"%file%" cmd/v/c echo !text_2!%z%!text_3! endlocal exit/b . |
Последний раз редактировалось Georgio, 12-09-2015 в 19:42. Отправлено: 14:20, 12-09-2015 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] Поиск, удаление, замена и добавление строк в текстового файле. Что возможно? | akrav | Скриптовые языки администрирования Windows | 8 | 06-12-2015 13:22 | |
CMD/BAT - [решено] Замена строк в файле, содержащем пустые строки | SharkyEXE | Скриптовые языки администрирования Windows | 6 | 02-03-2015 15:42 | |
CMD/BAT - Поиск строк в файле и замена их на числа,сгенерированные по маске. | galclerik | Скриптовые языки администрирования Windows | 17 | 19-12-2013 11:59 | |
VBS/WSH/JS - [решено] Поиск строки по маске в txt файле и замена всей строки из InputBox | ultrarare | Скриптовые языки администрирования Windows | 11 | 03-07-2013 14:37 | |
CMD/BAT - Замена нескольких строк в файле | bcubbs@fb | Скриптовые языки администрирования Windows | 3 | 24-01-2013 14:01 |
|