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[задаваемая маска три]
Очень прошу помощи!!!
Есть файл с содержимым вида:
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 - Замена строк в файле по признаку и маске
Может ли быть «диапазон» такого вида:
Код:
?
Код:
Код: Выделить всё
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[задаваемая маска три]
Где именно в скрипте устанавливается этот перевод строки, чтоб иметь возможность его убрать?
ИДЕАЛЬНО!!!!!!!!!!
(последний скрипт)
Единственный вопрос: при формировании файла, после вставки [задаваемая маска три] делается лишний перевод строки:
[задаваемая маска два]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
Приведен пример двух диапазонов.
Переход на другой диапазон происходит при разрыве в счете больше заданной пользователем величины.
Т.е. два диапазона будут выглядеть так:
задается разрыв = 5 и
61400013.97F
61400013.98F
61400013.99F
61400014.00F
61400014.01F
61400014.06F
61400014.07F
61400014.08F
Приведен пример двух диапазонов.
-
Iska
Re: CMD/BAT - Замена строк в файле по признаку и маске
Количество цифр до точки — всегда строго равно восьми символам? А после точки — строго двум и одной букве?
-
Iska
Re: CMD/BAT - Замена строк в файле по признаку и маске
ВиталийВ, 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]»
Попробовал с эмуляцией второй версии:
Код:
Не видит $group[-1], значит надо заменить на $group[$group.count-1]
У меня сработал, кроме одного — в результирующем файле отсутствуют первоначальные значения между «[mask2]» и «[mask3]»
CMD/BAT - Замена строк в файле по признаку и маске
Попробовал с эмуляцией второй версии:
Код:
Код: Выделить всё
start-process powershell -arg "-version 2.0"Не видит $group[-1], значит надо заменить на $group[$group.count-1]
-
Foreigner
Re: CMD/BAT - Замена строк в файле по признаку и маске
Foreigner, с указанным изменением отработало корректно. Ждём теперь архив с файлом от автора (хотя не представляю навскидку, что там может не работать).
-
Iska
Re: CMD/BAT - Замена строк в файле по признаку и маске
Foreigner, с указанным изменением отработало корректно. Ждём теперь архив с файлом от автора (хотя не представляю навскидку, что там может не работать).