CMD/BAT - Замена строк в файле по признаку и маске

Аватара пользователя
ВиталийВ

CMD/BAT - Замена строк в файле по признаку и маске

Сообщение ВиталийВ »

Добрый день!



Есть файл с содержимым вида:



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[задаваемая маска три]



Очень прошу помощи!!!
Аватара пользователя
Iska

Re: CMD/BAT - Замена строк в файле по признаку и маске

Сообщение Iska »

Может ли быть «диапазон» такого вида:



Код:

Код: Выделить всё

61400013.97F
61400013.98F
61400013.99F
61400014.00F
61400014.01F
61400014.02F

?
Аватара пользователя
ВиталийВ

Re: CMD/BAT - Замена строк в файле по признаку и маске

Сообщение ВиталийВ »

СУПЕР!!!!!!!!!

ИДЕАЛЬНО!!!!!!!!!!

(последний скрипт)

Единственный вопрос: при формировании файла, после вставки [задаваемая маска три] делается лишний перевод строки:



[задаваемая маска два]61400000.64F[задаваемая маска три]



[задаваемая маска]61400013.68F

[задаваемая маска]61400013.69F

[задаваемая маска]61400013.70F

[задаваемая маска два]61400013.71F[задаваемая маска три]



[задаваемая маска]61400048.51F

[задаваемая маска два]61400048.52F[задаваемая маска три]



Где именно в скрипте устанавливается этот перевод строки, чтоб иметь возможность его убрать?
Аватара пользователя
ВиталийВ

Re: CMD/BAT - Замена строк в файле по признаку и маске

Сообщение ВиталийВ »

Да, это считается диапазоном одного типа.



Переход на другой диапазон происходит при разрыве в счете больше заданной пользователем величины.



Т.е. два диапазона будут выглядеть так:



задается разрыв = 5 и



61400013.97F

61400013.98F

61400013.99F

61400014.00F

61400014.01F



61400014.06F

61400014.07F

61400014.08F



Приведен пример двух диапазонов.
Аватара пользователя
Iska

Re: CMD/BAT - Замена строк в файле по признаку и маске

Сообщение Iska »

Количество цифр до точки — всегда строго равно восьми символам? А после точки — строго двум и одной букве?
Аватара пользователя
Iska

Re: CMD/BAT - Замена строк в файле по признаку и маске

Сообщение Iska »

ВиталийВ, Powershell устроит?



Код:

Код: Выделить всё

$mask1 = '[mask1]'
$mask2 = '[mask2]'
$mask3 = '[mask3]'
get-content 'C:\file.txt' | group {$_.split('.')[0]} | foreach {
	$group = $_.group
	$group[0..($group.count-2)] | foreach { $mask1 + $_ }
	$mask2 + $group[-1] + $mask3
} | set-content 'C:\file.txt'
Аватара пользователя
ВиталийВ

Re: CMD/BAT - Замена строк в файле по признаку и маске

Сообщение ВиталийВ »

Да, формат строк - неизменен.



Приведенный пример у меня не сработал, файл не изменился.
Аватара пользователя
ВиталийВ

Re: CMD/BAT - Замена строк в файле по признаку и маске

Сообщение ВиталийВ »

Цитата Iska:



У меня сработал, кроме одного — в результирующем файле отсутствуют первоначальные значения между «[mask2]» и «[mask3]»
CMD/BAT - Замена строк в файле по признаку и маске




Попробовал с эмуляцией второй версии:



Код:

Код: Выделить всё

start-process powershell -arg "-version 2.0"

Не видит $group[-1], значит надо заменить на $group[$group.count-1]
Аватара пользователя
Foreigner

Re: CMD/BAT - Замена строк в файле по признаку и маске

Сообщение Foreigner »

Foreigner, с указанным изменением отработало корректно. Ждём теперь архив с файлом от автора (хотя не представляю навскидку, что там может не работать).
Аватара пользователя
Iska

Re: CMD/BAT - Замена строк в файле по признаку и маске

Сообщение Iska »

Foreigner, с указанным изменением отработало корректно. Ждём теперь архив с файлом от автора (хотя не представляю навскидку, что там может не работать).
Ответить

Вернуться в «Скриптовые языки администрирования Windows»