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

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

05.07.2019, 16:58. Просмотров 540. Ответов 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
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.07.2019, 16:58
Ответы с готовыми решениями:

Распределение блоков текста из одного txt-файла по нескольким
Здравствуйте, подскажите, пожалуйста, как решить такую не простую задачу: есть исходный файл...

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

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

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

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

13
bidstrup
306 / 126 / 19
Регистрация: 11.03.2018
Сообщений: 572
05.07.2019, 18:42 2
А что символизирует смайлик, это шутка была что ли?
0
AlexanderSh88
2 / 2 / 2
Регистрация: 28.09.2015
Сообщений: 245
05.07.2019, 18:58  [ТС] 3
Цитата Сообщение от bidstrup Посмотреть сообщение
А что символизирует смайлик, это шутка была что ли?
Почему? просто так поставил )
0
alhaos
51 / 39 / 13
Регистрация: 20.02.2019
Сообщений: 147
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
08.07.2019, 07:53
v_svitere
697 / 408 / 134
Регистрация: 03.06.2009
Сообщений: 1,189
Записей в блоге: 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
alhaos
51 / 39 / 13
Регистрация: 20.02.2019
Сообщений: 147
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
v_svitere
697 / 408 / 134
Регистрация: 03.06.2009
Сообщений: 1,189
Записей в блоге: 4
09.07.2019, 09:54 7
alhaos,
да и в значении совпадения тут нет необходимости, достаточно знать содержат ли строка регулярное выражение.
Вы даже не попытались разобраться что делает мой код. Отсюда возникает вопрос: зачем давать комментарии к коду, который ты не понял?

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

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

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

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

AAT666,

интересует конкретный нюанс - удаление \r\n
Покажите на примере, что именно вам нужно.
0
AAT666
61 / 39 / 16
Регистрация: 16.06.2016
Сообщений: 104
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
alhaos
51 / 39 / 13
Регистрация: 20.02.2019
Сообщений: 147
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
v_svitere
697 / 408 / 134
Регистрация: 03.06.2009
Сообщений: 1,189
Записей в блоге: 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
AAT666
61 / 39 / 16
Регистрация: 16.06.2016
Сообщений: 104
09.07.2019, 15:50 14
alhaos, v_svitere, Благодарствую, уважаемые!!
0
09.07.2019, 15:50
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.07.2019, 15:50

Ввод данных с txt файла, сортировка и запись результата в txt файлы
Доброго времени суток, такое задание, не могу сделать ввод данных из .тхт файла, чтобы потом...

Файлы. В файл output.txt записать максимальное и минимальное числа из файла input.txt
Нужна программа, которая выпишет максимальное и минимальное числа из файла input.txt, содержащего...

Из файла 1.txt взять n первых и n последних строк, и сохранить их как файл 2.txt
Подскажите пожалуйста, как из файла 1.txt взять n первых и n последних строк, и сохранить их как...


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

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

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