![]() |
Замена строк в файле по признаку и маске
Добрый день!
Есть файл с содержимым вида: 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.97F |
Да, это считается диапазоном одного типа.
Переход на другой диапазон происходит при разрыве в счете больше заданной пользователем величины. Т.е. два диапазона будут выглядеть так: задается разрыв = 5 и 61400013.97F 61400013.98F 61400013.99F 61400014.00F 61400014.01F 61400014.06F 61400014.07F 61400014.08F Приведен пример двух диапазонов. |
Количество цифр до точки — всегда строго равно восьми символам? А после точки — строго двум и одной букве?
|
ВиталийВ, Powershell устроит?
Код:
$mask1 = '[mask1]' |
Да, формат строк - неизменен.
Приведенный пример у меня не сработал, файл не изменился. |
У меня сработал, кроме одного — в результирующем файле отсутствуют первоначальные значения между «[mask2]» и «[mask3]» :). Т.е, на исходном примере выходит (PowerShell 2.0):
Скрытый текст
Код:
[mask1]61400013.68F ВиталийВ, коли у Вас так — выкладывайте Ваш файл, упаковав его в архив (прикрепив последний к сообщению, либо выложив на RGhost). И последний вопрос — к какому случаю следует относить «диапазон» из одной строки — к «маска1» или «маска2+маска3»? |
Цитата:
Код:
start-process powershell -arg "-version 2.0" |
Foreigner, с указанным изменением отработало корректно. Ждём теперь архив с файлом от автора (хотя не представляю навскидку, что там может не работать).
|
Код пакетного файла:
Код:
@echo off . |
СУПЕР!!!!!!!!!
ИДЕАЛЬНО!!!!!!!!!! (последний скрипт) Единственный вопрос: при формировании файла, после вставки [задаваемая маска три] делается лишний перевод строки: [задаваемая маска два]61400000.64F[задаваемая маска три] [задаваемая маска]61400013.68F [задаваемая маска]61400013.69F [задаваемая маска]61400013.70F [задаваемая маска два]61400013.71F[задаваемая маска три] [задаваемая маска]61400048.51F [задаваемая маска два]61400048.52F[задаваемая маска три] Где именно в скрипте устанавливается этот перевод строки, чтоб иметь возможность его убрать? |
Цитата:
Ну почему же "лишний"? Вы же сами писали в ТЗ: Цитата:
. Чтобы пустая строка не выводилась, нужно "закомментировать" строку " set blank=true" или (и) строку " if defined blank echo.& set blank=": Код:
rem set blank=true Код:
rem if defined blank echo.& set blank= |
Попробовал закомментировать обе строки - вышло как надо.
Спасибо огромное - выручили несказАнно!!!!!!! Тетки на работе вздохнут немного, а то они по 2-3 тыщи файлов глазами отсматривали, сейчас это будет в автомате. |
Время: 07:13. |
Время: 07:13.
© OSzone.net 2001-