Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Распределение блоков текста из одного тхт файла по нескольким

Ответить
Настройки темы
Любой язык - Распределение блоков текста из одного тхт файла по нескольким

Ветеран


Сообщения: 546
Благодарности: 4

Профиль | Отправить PM | Цитировать


Изменения
Автор: Alexander_88
Дата: 18-02-2016
Здравствуйте, подскажите, пожалуйста, как решить такую не простую задачу:

есть исходный файл posts.txt, состоящий из блоков (которых очень много):

Код: Выделить весь код
<subject>Video films</subject>
<center><img class="size-full" src="http://mysite.com/wp-content/uploads/0001start-cover.jpg" alt="Video films" />
avi | 0:15:44 | 640x480 | 120Mb
<!--more-->
<categories>terminator (fantastika)</categories>
<tags>tag1, tag2, tag3</tags>
<img class="size-full" src="http://mysite.com/wp-content/uploads/0001start-tumble.jpg" alt="Video films" />
<blockquote><a href="http://k2s.cc/file/dd5ddk87609aa8c40/0001start.wmv" target="_blank">Video films</a></blockquote></center>
------------------------------------------------------------
<subject>Boevik</subject>
<center><img class="size-full" src="http://mysite.com/wp-content/uploads/0002start-cover.jpg" alt="Boevik" />
avi | 0:35:44 | 640x480 | 120Mb
<!--more-->
<categories>Comedi 1987</categories>
<tags>tag1, tag2, tag3</tags>
<img class="size-full" src="http://mysite.com/wp-content/uploads/0002start-tumble.jpg" alt="Boevik" />
<blockquote><a href="http://k2s.cc/file/dd5ddkuiyi559aa8c40/0002start.wmv" target="_blank">Boevik</a></blockquote></center>
------------------------------------------------------------
<subject>Serial nash</subject>
<center><img class="size-full" src="http://mysite.com/wp-content/uploads/0003start-cover.jpg" alt="Serial nash" />
wmv | 0:41:48 | 640x480 | 120Mb
<!--more-->
<categories>terminator (fantastika)</categories>
<tags>tag1, tag2, tag3</tags>
<img class="size-full" src="http://mysite.com/wp-content/uploads/0003start-tumble.jpg" alt="Serial nash" />
<blockquote><a href="http://k2s.cc/file/dd5ddkdfgf59aa8c40/0003start.wmv" target="_blank">Serial nash</a></blockquote></center>
------------------------------------------------------------
Необходимо распределить эти блоки по текстовым файлам. В скрипте я должен буду указать фразу в самом файле скрипта, которую скрипт будет искать, а также путь к текстовому файлу, куда будут добавляться блоки текста, в которых найдется эта фраза. Блок текста - это весь текст в блоке и нижняя граница (верхняя граница и все что выше нее не относится к текущему блоку).


Пример:

исходный файл дан выше.

В файле скрипта я указываю фразы и пути к текстовым файлам.

Код: Выделить весь код
terminator (fantastika) - С:\work\fantastika.txt
Comedi 1987 - С:\work\comedy.txt
После выполнения скрипта, в текстовых файлах должен добавиться текст:

fantastika.txt
Код: Выделить весь код
<subject>Video films</subject>
<center><img class="size-full" src="http://mysite.com/wp-content/uploads/0001start-cover.jpg" alt="Video films" />
avi | 0:15:44 | 640x480 | 120Mb
<!--more-->
<categories>terminator (fantastika)</categories>
<tags>tag1, tag2, tag3</tags>
<img class="size-full" src="http://mysite.com/wp-content/uploads/0001start-tumble.jpg" alt="Video films" />
<blockquote><a href="http://k2s.cc/file/dd5ddk87609aa8c40/0001start.wmv" target="_blank">Video films</a></blockquote></center>
------------------------------------------------------------
<subject>Serial nash</subject>
<center><img class="size-full" src="http://mysite.com/wp-content/uploads/0003start-cover.jpg" alt="Serial nash" />
wmv | 0:41:48 | 640x480 | 120Mb
<!--more-->
<categories>terminator (fantastika)</categories>
<tags>tag1, tag2, tag3</tags>
<img class="size-full" src="http://mysite.com/wp-content/uploads/0003start-tumble.jpg" alt="Serial nash" />
<blockquote><a href="http://k2s.cc/file/dd5ddkdfgf59aa8c40/0003start.wmv" target="_blank">Serial nash</a></blockquote></center>
------------------------------------------------------------
comedy.txt
Код: Выделить весь код
<subject>Boevik</subject>
<center><img class="size-full" src="http://mysite.com/wp-content/uploads/0002start-cover.jpg" alt="Boevik" />
avi | 0:35:44 | 640x480 | 120Mb
<!--more-->
<categories>Comedi 1987</categories>
<tags>tag1, tag2, tag3</tags>
<img class="size-full" src="http://mysite.com/wp-content/uploads/0002start-tumble.jpg" alt="Boevik" />
<blockquote><a href="http://k2s.cc/file/dd5ddkuiyi559aa8c40/0002start.wmv" target="_blank">Boevik</a></blockquote></center>
Примечания:
Если фраза не нашлась, то ничего добавлять не нужно.
Один и тот же блок точно не будет содержать более одной указанной фразы.


Отправлено: 13:30, 18-02-2016

 

Забанен


Сообщения: 793
Благодарности: 260

Профиль | Цитировать


AlexanderSh88, зачем прыгать с форума на форум? Тем паче, что у Вас возникают сложности с запуском сценариев PowerShell. Простите за резкость, но Вы бы для начала разобрались с последним, да и неплохо было бы Вам самостоятельно что-то начать делать. Ваша же задача решается примерно так же, как и задача с блоками. Например:
Код: Выделить весь код
param(
  [Parameter(Mandatory=$true, Position=0)]
  [ValidateScript({Test-Path $_})]
  [String]$InputFile,
  
  [Parameter(Mandatory=$true, Position=1)]
  [ValidateNotNullOrEmpty()]
  [String]$Pattern,
  
  [Parameter(Mandatory=$true, Position=2)]
  [String]$OutputFile
)

$InputFile = Convert-Path $InputFile
$Pattern = $Pattern.Replace('(', '\(').Replace(')', '\)')
$getBlocks = {param([Int32]$context)
  Select-String $InputFile -Pattern "^" |
  Where-Object {$_.LineNumber -gt ($context - 5) -and $_.LineNumber -le ($context + 4)} |
  Select-Object Line -ExpandProperty Line
}

$(if (($$ = Select-String $InputFile -Pattern $Pattern -CaseSensitive |
  Select-Object LineNumber -ExpandProperty LineNumber) -is [Array]) {
  $$ | ForEach-Object { &$getBlocks $_ }
}
elseif ($$ -ne $null) { &$getBlocks $$ }) | Out-File $OutputFile -Encoding ASCII
Пример использования:
Код: Выделить весь код
PS E:\sandbox> .\source.ps1 list.txt "Comedi 1987" C:\work\comedy.txt
Или:
Код: Выделить весь код
PS E:\sandbox> .\source.ps1 list.txt "terminator (fantastika)" C:\work\fantastika.txt
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:25, 19-02-2016 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 546
Благодарности: 4

Профиль | Отправить PM | Цитировать


Спасибо

Цитата greg zakharov:
да и неплохо было бы Вам самостоятельно что-то начать делать »
Сегодня пол дня разбирался как параметры в скрипт передать, но все получилось

Отправлено: 15:03, 19-02-2016 | #3



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - Распределение блоков текста из одного тхт файла по нескольким

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] скопировать n последних строк одного тхт файла и вставить их в конец другого тхт файл Alexander_88 Скриптовые языки администрирования Windows 2 23-11-2015 16:38
Любой язык - [решено] Извлечь определенные строки по счету из одного тхт файла в другой Alexander_88 Скриптовые языки администрирования Windows 11 13-06-2015 12:48
Любой язык - [решено] извлечение ссылок из одного тхт файла в другой Alexander_88 Скриптовые языки администрирования Windows 4 05-04-2015 15:39
CMD/BAT - [решено] копирование указанного количества случайных блоков текста из текстового файла Alexander_88 Скриптовые языки администрирования Windows 7 26-08-2014 18:36
Любой язык - [решено] из одного тхт файла добавить содержимое во все тхт файлы папки gangsterovich Скриптовые языки администрирования Windows 3 06-05-2011 04:29




 
Переход