Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105

Скрипт замены в текстовом файле с файлом замен в цикле

04.07.2019, 10:47. Показов 5015. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день всем!
Нужно произвести замену в плейлистах .m3u (по сути текстовые файлы).
Но так как замен достаточно много, решил выписать все необходимые замены в текстовый файл и включить его в цикл.
Скрипт:
PowerShell
1
2
3
4
5
6
     $plist = Get-Content ipe.m3u
     foreach($line in Get-Content test.txt) {
     if($line ){
     $plist -replace "$line","Пример" | Set-Content ipe1.m3u
     }
}
В итоге замены не производятся. Вернее замена производится, но при следующей строке цикла, так как файл ipe.m3u промежуточно не сохранен, произведённая замена пропадает.
Знатоки PS, подскажите, пожалуйста, можно ли как-то решить этот вопрос ?
Папку со скриптом и файлами прикрепил.
Будут благодарен за любые подсказки.
Вложения
Тип файла: zip replace.zip (841 байт, 3 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.07.2019, 10:47
Ответы с готовыми решениями:

Несколько заданных замен текста в текстовом файле
Всем привет! Подскажите плиз. Есть код: @echo off chcp 1251 set src=1.txt set dest=out.txt For /F "UseBackQ...

Процедура замены последней литеры в текстовом файле
Здравствуйте! Помогите с процедурой замены последней литеры в текстовом файле. Часть я уже сделал. Должно быть меню, которое сделал....

Скрипт поиска и замены текста в файле
Всем привет! Помогите пожалуйста написать простой скрипт по поиску и замены текста в файле. Есть текст такого вида: Как видно...

9
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
04.07.2019, 14:03
Цитата Сообщение от Uragan66 Посмотреть сообщение
В итоге замены не производятся. Вернее замена производится, но при следующей строке цикла, так как файл ipe.m3u промежуточно не сохранен, произведённая замена пропадает.
PowerShell
1
2
3
4
5
6
7
8
$plist = Get-Content ipe.m3u
 
ForEach ($line in Get-Content test.txt -Encoding UTF8 | Where {$_})
{
    $plist = $plist -replace $line,"Пример"
}
 
$plist | Set-Content ipe1.m3u
1
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
04.07.2019, 15:26
Мой вариант
PowerShell
1
2
3
$plist = gc ipe.m3u
sls test.txt -Encoding utf8 -Pattern '.*' | % {$plist = $plist -replace $_.Line ,"Пример"}
$plist | gc ipe1.m3u
Добавлено через 14 минут
или так что ли....
PowerShell
1
2
3
$plist = gc ipe.m3u
gc test.txt -Encoding utf8 | % {$plist = $plist.Replace($_ ,"Пример")}
$plist | sc ipe1.m3u
Добавлено через 15 минут
погодите результаты замены ведь идут в другой файл тогда все проще
PowerShell
1
gc ipe.m3u | %{$l = $_ ;gc test.txt -Encoding utf8 | % {$l = $l.Replace($_ ,"Пример")};$l} | sc ipe1.m3u
1
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105
04.07.2019, 15:30  [ТС]
KDE777, alhaos, ребята, спасибо большое ! Вроде все варианты работают хорошо. Нужно ещё на больших файлах замен (файл test.txt), где много строк и в строке поиска несколько подстрок через "или", попробовать.
Подскажите ещё , пожалуйста, как можно в скрипт добавить условие "если в конце цикла (в файле test.txt) есть пустая строка, ну или что-нибудь другое прописано, то необходимо перейти на другой цикл (такой же но с другой строкой на что менять)" ?

Добавлено через 1 минуту
Цитата Сообщение от alhaos Посмотреть сообщение
погодите результаты замены ведь идут в другой файл тогда все проще
да здесь большой разницы нет, можно выход делать и с перезаписыванием файла и в новый.
0
 Аватар для alhaos
1929 / 545 / 154
Регистрация: 20.02.2019
Сообщений: 2,664
Записей в блоге: 65
04.07.2019, 15:39
я поплыл... сейчас в чем проблема? объем данных настолько велик, что данные скрипты за допустимое время не справятся?
1
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105
04.07.2019, 16:05  [ТС]
Цитата Сообщение от alhaos Посмотреть сообщение
объем данных настолько велик, что данные скрипты за допустимое время не справятся?
да нет, объём данных не очень большой, во входном файле может быть до 10 000 строк (в каждой строке до 100 символов).
А в файле замен строк до 100 -150. Просто, чтобы не делать много файлов замен, хотел всё в одном прописать через пустую строку.
Когда цикл доходит до пустой строки, следующие строки за ней нужно менять уже на другое значение.
Извините, может не совсем внятно объяснил.
Пример, в файле замен:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Спорт Плюс
Спорт Союз
Спорт-1
Спорт-1 HD
Спортивное телевидение
Старт
ТВ-Карибу-Арт-Спорт
Точка отрыва
Туркменистан-спорт
Футбол (Россия)
Футбол (Таджикистан)
Футбол 1 (Украина)|Футбол 1
Футбол 1 HD (Украина)|Футбол 1 HD
Футбол 2 (Украина)|Футбол 2
Футбол 2 HD (Украина)|Футбол 2 HD
ЮниорТВ
 
5 канал (Россия)|5 канал Россия|Пятый|5 канал
8 канал (Россия)|8 канал|Восьмой канал (Россия) 
Звезда|Zvezda|Звезда (16:9)
Мир|Mir|МИР
Мир HD|Mir HD|МИР HD
Мир Premium|МИР Premium
НТВ|NTV
ОРТ Планета
ОТР
До пустой строки все вхождения должны меняться на "Пример", после неё - на "Другой пример"
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
04.07.2019, 17:05
Цитата Сообщение от Uragan66 Посмотреть сообщение
До пустой строки все вхождения должны меняться на "Пример", после неё - на "Другой пример"
Создаёте вот такой файл для замен:

list.csv
Кликните здесь для просмотра всего текста
Match;Replace
Спорт Плюс;Пример
Спорт Союз;Пример
Спорт-1;Пример
Спорт-1 HD;Пример
Спортивное телевидение;Пример
Старт;Пример
ТВ-Карибу-Арт-Спорт;Пример
Точка отрыва;Пример
Туркменистан-спорт;Пример
Футбол (Россия);Пример
Футбол (Таджикистан);Пример
Футбол 1 (Украина)|Футбол 1;Пример
Футбол 1 HD (Украина)|Футбол 1 HD;Пример
Футбол 2 (Украина)|Футбол 2;Пример
Футбол 2 HD (Украина)|Футбол 2 HD;Пример
ЮниорТВ;Пример
5 канал (Россия)|5 канал Россия|Пятый|5 канал;Другой пример
8 канал (Россия)|8 канал|Восьмой канал (Россия) ;Другой пример
Звезда|Zvezda|Звезда (16:9);Другой пример
Мир|Mir|МИР;Другой пример
Мир HD|Mir HD|МИР HD;Другой пример
Мир Premium|МИР Premium;Другой пример
НТВ|NTV;Другой пример
ОРТ Планета;Другой пример
ОТР;Другой пример


и тогда можно делать так:

PowerShell
1
2
3
4
5
6
7
$text = Get-Content ipe.m3u
 
Import-Csv list.csv -Delimiter ';' -Encoding Default | Group Replace | ForEach {
    $text = $text -replace ((($_.Group).Match | ForEach {[regex]::Escape($_)}) -join '|'),$_.Name
}
 
$text | Set-Content ipe1.m3u
1
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105
04.07.2019, 18:10  [ТС]
KDE777, спасибо большое, но так у меня не идёт замена, так как в реальности Regexp более сложный. Можно в файле замен указать Regexp с группами, вернее с одной ?

Например, Спорт Плюс нужно заменить на group-title="Спорт",Спорт Плюс
0
 Аватар для KDE777
1886 / 1108 / 428
Регистрация: 22.01.2016
Сообщений: 3,050
04.07.2019, 18:33
Лучший ответ Сообщение было отмечено Uragan66 как решение

Решение

Цитата Сообщение от Uragan66 Посмотреть сообщение
Например, Спорт Плюс нужно заменить на group-title="Спорт",Спорт Плюс
Если в файле list.csv написать:

Code
1
2
Match;Replace
Спорт Плюс;group-title="Спорт",Спорт Плюс
тогда мой пример такую замену и сделает.

Пояснение: мой пример выбирает из csv-файла все Match, у которых одинаковые "Replace" и экранируя управляющие regexp-символы, объединяет всё это с помощью символа "|".

Получается регулярное выражение, которое применяется в -replace, сразу ко всему тексту:

PowerShell
1
$text = $text -replace "5\ канал\ \(Россия\)\|5\ канал\ Россия\|Пятый\|5\ канал|8\ канал\ \(Россия\)\|8\ канал\|Восьмой\ канал\ \(Россия\)\ |Звезда\|Zvezda\|Звезда\ \(16:9\)|Мир\|Mir\|МИР|Мир\ HD\|Mir\ HD\|МИР\ HD|Мир\ Premium\|МИР\ Premium|НТВ\|NTV|ОРТ\ Планета|ОТР","Другой пример"
1
14 / 12 / 2
Регистрация: 27.03.2017
Сообщений: 105
04.07.2019, 19:04  [ТС]
KDE777, теперь уяснил. Ещё раз спасибо большое, на будущее буду знать!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.07.2019, 19:04
Помогаю со студенческими работами здесь

Оператор преобразования типа и его эквивалентные замены, поиск строки в текстовом файле , содержащей заданный
Господа, был бы очень признателен если бы кто то помог ответить на вапросы http://cs616225.vk.me/v616225102/122f8/5kAaFEGoDn0.jpg

Hаписать пpогpамму поиска и замены введенного с клавиатуры слова на другое той же длины в текстовом файле
3. Hаписать пpогpамму поиска и замены введенного с клавиатуры слова на другое той же длины в текстовом файле. помогите кому не...

Самый простой и РАБОТАЮЩИЙ скрипт для замены текста в файле
Очень плохо разбираюсь в этих скриптах, надеюсь на понимание....

Скрипт замены баз в файле ibases.v8i c использованием excel
Добрый день. Помогите пожалуйста как сделать замену всех путей баз в файлах ibases.v8i. Есть сервер, где у кого-то прописаны в файле...

В текстовом файле найти строки, в которых не было ни одной замены каждого третьего слова «мама» на слово «мамочка»
Изначально задание было как раз заменить каждое 3 слово мама на мамочка и посчитать количество замен. Теперь нечто похожее, но читать из...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru