Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Распределение блоков текста из одного тхт файла по нескольким (http://forum.oszone.net/showthread.php?t=311748)

Alexander_88 18-02-2016 13:30 2607480

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

есть исходный файл 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>

Примечания:
Если фраза не нашлась, то ничего добавлять не нужно.
Один и тот же блок точно не будет содержать более одной указанной фразы.

:)

greg zakharov 19-02-2016 10:25 2607794

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

Alexander_88 19-02-2016 15:03 2607944

Спасибо

Цитата:

Цитата greg zakharov
да и неплохо было бы Вам самостоятельно что-то начать делать »

Сегодня пол дня разбирался как параметры в скрипт передать, но все получилось :)


Время: 05:40.

Время: 05:40.
© OSzone.net 2001-