Форум программистов, компьютерный форум, киберфорум
PowerShell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
2 / 2 / 2
Регистрация: 28.09.2015
Сообщений: 258
1

Добавить блоки строк из одного txt файла в другие txt файлы

05.07.2019, 16:58. Показов 1506. Ответов 13
Метки нет (Все метки)

Здравствуйте. Можно ли сделать распределение блоков из одного txt в другие?

В одном txt файле (назовем его общим) есть множество блоков строк, разделенных разделителем //==================

Необходимо каждый из этих блоков строк добавить в нужный txt файл (рассортировать).
Как определить, в какой txt файл добавить каждый блок строк из общего txt файла? Определять нужно по поиску.

Например, общий файл general.txt имеет вид (на самом деле может быть не одна тысяча блоков строк):

Код
File Name.type:  0701start.avi
Resolution:  640x480 
Duration:  0:15:24
Filesize:  214Mb
//==================
File Name.type:  0894gsd.mp4
Resolution:  640x480 
Duration:  0:31:24
Filesize:  239Mb
Language: English
Censorship: Yes
Subtitle: No
//==================
File Name.type:  start0154.wmv
Resolution:  600x400 
Duration:  0:49:14
Filesize:  839Mb

Я указываю в скрипте поиск слова, и в какой txt добавить блок строк, если слово найдется:

Код
"gsd" - C:\video.txt
"start" - C:\clip.txt

В результате выполнения скрипта должны появится 2 файла на диске C:

video.txt
Код
File Name.type:  0894gsd.mp4
Resolution:  640x480 
Duration:  0:31:24
Filesize:  239Mb
Language: English
Censorship: Yes
Subtitle: No
clip.txt
Код
File Name.type:  0701start.avi
Resolution:  640x480 
Duration:  0:15:24
Filesize:  214Mb
File Name.type:  start0154.wmv
Resolution:  600x400 
Duration:  0:49:14
Filesize:  839Mb
Примечание:
Файлы txt должны появиться, если их не было, но если они были, то блоки строк должны просто добавиться (в общем txt будет много блоков строк, которые должны уйти в один и тот же txt файл).
Бывают блоки в которых только одна строка (и разделитель конечно).
Результаты будут добавляться в txt файлы созданные в windows (блокнот, ansi).

0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2019, 16:58
Ответы с готовыми решениями:

Вставить N последних строк одного TXT-файла в конец другого TXT-файла
Здравствуйте, подскажите пожалуйста, как можно скопировать n последних строк одного тхт файла и...

Чтение из файла 'New.txt', запись четных строк в '1.txt', а нечетных в '2.txt'
В общем все работает, но есть "НО", иначе бы не открывал тему. Содержимое исходного файла: 1 1 1...

Копирование определенных строк с одного .txt на другой *.txt
Ребзи помогите пожалуйста. Задача такая, есть текстовой файл с множ-во строк. Нужно вытащить оттуда...

Копировать определённый текст с одного txt файла в другой txt
Здравтсвуйте. Подскажите как написать команду cmd/bat, для такой задачи: Есть текстовый документ,...

13
368 / 167 / 26
Регистрация: 11.03.2018
Сообщений: 723
05.07.2019, 18:42 2
А что символизирует смайлик, это шутка была что ли?
0
2 / 2 / 2
Регистрация: 28.09.2015
Сообщений: 258
05.07.2019, 18:58  [ТС] 3
Цитата Сообщение от bidstrup Посмотреть сообщение
А что символизирует смайлик, это шутка была что ли?
Почему? просто так поставил )
0
375 / 211 / 66
Регистрация: 20.02.2019
Сообщений: 1,238
Записей в блоге: 24
08.07.2019, 07:53 4
split плюс условие

PowerShell
1
2
3
4
5
6
(gc C:\tmp\general.txt -Raw ) -split '//==================' | %{
    if ($_ -match 'gsd')
        {$_ | ac C:\tmp\video.txt}
    if ($_ -match 'start')
        {$_ | ac C:\tmp\clip.txt}
}
Добавлено через 6 минут
замерьте время, если будет недопустимо, напишите.
0
772 / 421 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
08.07.2019, 17:53 5
alhaos,
split плюс условие
Лучше регулярка.

Что-то типа
PowerShell
1
2
([regex]'(?s)File Name.type:\s+\w+start.*?//=+').matches($text).value
([regex]'(?s)File Name.type:\s+\w+gsd.*?//=+').matches($text).value
Правда, тут есть и свои нюансы
0
375 / 211 / 66
Регистрация: 20.02.2019
Сообщений: 1,238
Записей в блоге: 24
09.07.2019, 06:43 6
Цитата Сообщение от v_svitere Посмотреть сообщение
Лучше регулярка.
Что-то типа

([regex]'(?s)File Name.type:\s+\w+start.*?//=+').matches($text).value
([regex]'(?s)File Name.type:\s+\w+gsd.*?//=+').matches($text).value
ну то что моя регулярка "так себе", согласен, но неужели вам удобнее так:
PowerShell
1
([regex]'(?s)File Name.type:\s+\w+start.*?//=+').matches($text).value
чем вот так:
PowerShell
1
$_ -match 'File Name.*start'
да и в значении совпадения тут нет необходимости, достаточно знать содержат ли строка регулярное выражение.
0
772 / 421 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
09.07.2019, 09:54 7
alhaos,
да и в значении совпадения тут нет необходимости, достаточно знать содержат ли строка регулярное выражение.
Вы даже не попытались разобраться что делает мой код. Отсюда возникает вопрос: зачем давать комментарии к коду, который ты не понял?

PowerShell
1
([regex]'(?s)File Name.type:\s+\w+start.*?//=+').matches($text).value
Сразу получает коллекцию матчей по искомому Pattern-у. Здесь не нужно ничего сравнивать, никаких форейчей и условных конструкций.
0
375 / 211 / 66
Регистрация: 20.02.2019
Сообщений: 1,238
Записей в блоге: 24
09.07.2019, 13:19 8
Цитата Сообщение от v_svitere Посмотреть сообщение
зачем давать комментарии к коду, который ты не понял?
С чего вы взяли что я понял, я понял, не правильно...
Что то агрессивные все сегодня.

Добавлено через 6 минут
нет чтобы написать, "чувак ты фишки не рубишь, тут вот так..."

Правду следует подавать так, как подают пальто, а не швырять в лицо, как мокрое полотенце.
— Марк Твен,
0
72 / 48 / 19
Регистрация: 16.06.2016
Сообщений: 135
09.07.2019, 14:10 9
Цитата Сообщение от v_svitere Посмотреть сообщение
Правда, тут есть и свои нюансы
Приветствую! Ну и как бороться с этим нюансом ? Что-то слету не получается.
Подскажите, плиз!

интересует конкретный нюанс - удаление \r\n
0
772 / 421 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
09.07.2019, 14:27 10
alhaos, Я и не думал, писать что-то агрессивное, просто недоуменно спросил.

AAT666,

интересует конкретный нюанс - удаление \r\n
Покажите на примере, что именно вам нужно.
0
72 / 48 / 19
Регистрация: 16.06.2016
Сообщений: 135
09.07.2019, 14:55 11
Взял Ваш код:

PowerShell
1
([regex]'(?s)File Name.type:\s+\w+start.*?//=+').matches($text).value
Взял файл топикстартера:

Код
File Name.type:  0701start.avi
Resolution:  640x480 
Duration:  0:15:24
Filesize:  214Mb
//==================
File Name.type:  0894gsd.mp4
Resolution:  640x480 
Duration:  0:31:24
Filesize:  239Mb
Language: English
Censorship: Yes
Subtitle: No
//==================
File Name.type:  start0154.wmv
Resolution:  600x400 
Duration:  0:49:14
Filesize:  839Mb
На выходе получил:

Код
File Name.type:  0701start.avi Resolution:  640x480  Duration:  0:15:24 Filesize:  214Mb //==================
Хотелось бы вернуть форматирование текста.
0
375 / 211 / 66
Регистрация: 20.02.2019
Сообщений: 1,238
Записей в блоге: 24
09.07.2019, 15:11 12
вот готовое решение на основе решения v_svitere,
PowerShell
1
2
3
$text = (gc C:\tmp\general.txt -Raw )
    ([regex]'(?s)File Name.type:\s+\w+start.*?//=+').matches($text).value | sc C:\tmp\video.txt
    ([regex]'(?s)File Name.type:\s+\w+gsd.*?//=+').matches($text).value | sc C:\tmp\clip.txt
работает быстрее моего.
1
772 / 421 / 137
Регистрация: 03.06.2009
Сообщений: 1,223
Записей в блоге: 4
09.07.2019, 15:33 13
AAT666,
Вы скорее всего считали текст из файла в переменную типа String, тогда как gc по умолчанию считывает в массив типа String.

Альтернативным вариантом предложенному выше, будет использование NET-метода, статического класса [system.io.file]
ReadAllText, который сразу считывает контент в переменную типа string, с сохранением переводов строк.

PowerShell
1
$text=[System.IO.File]::ReadAllText($my_file,[Text.encoding]::default)
1
72 / 48 / 19
Регистрация: 16.06.2016
Сообщений: 135
09.07.2019, 15:50 14
alhaos, v_svitere, Благодарствую, уважаемые!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.07.2019, 15:50

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Копирование данных из одного файла txt в другой файл txt
Помогите, пожалуйста, создать bat файл, который бы из одного документа, например, 1.txt копировал...

Копировать определённый текст с одного txt файла в другой txt
Здравтсвуйте. Подскажите как написать в PowerShell задачу (если это делается не в PowerShell,...

Переместить текст из одного txt файла в другой txt файл
Есть файл Admin.txt и Admin_Settings.txt Нужно что бы при нажатии на кнопку весь текст и все...

Из одного .txt файла сохранить все УНИКАЛЬНЫЕ слова в другой .txt файл используя cmd
нужно используя файл например run.cmd как-то сделать следующее... (накрайняк используя PS) из...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.