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

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

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

Ветеран


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

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


Здравствуйте, подскажите, пожалуйста, как можно скопировать определенную часть блоков текстового документа и вставить их в другой тхт файл? Чтобы скрипт понял какую часть блоков тхт документа копировать, я должен буду в файле скрипта указать "начальную" и "конечную" фразы. Скрипт должен будет скопировать все блоки от начальной до конечной фразы и вставить их в другой тхт файл. Блоком считается текст и нижний разделитель (верхний разделитель и все, что выше, не входит в текущий блок).

Пример:

Пусть исходный файл 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>
------------------------------------------------------------
Пусть начальная фраза 0001start
Пусть конечная фраза 0002start

после выполнения скрипта должен появиться файл posts2.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>
------------------------------------------------------------
Примечание:
Блоков много.
Одна и та же фраза (хоть начальная, хоть конечная) точно не будет находиться в двух блоках одновременно.

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

 

Забанен


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

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


А какой смысл писать что-то вроде "000Xstart"? Если следовать логике регулярных выражений достаточно указать числа для шаблона подобного "[X|Y]start", относительно чего в свою очередь ищем индексы строк, из которых составляется диапазон блока. Иными словами, если наш текст:
Код: Выделить весь код
<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>
------------------------------------------------------------
То:
Код: Выделить весь код
param(
  [Parameter(Mandatory=$true, Position=0)]
  [ValidateScript({Test-Path $_})]
  [String]$FileName,
  
  [Parameter(Mandatory=$false)]
  [Int32]$Begin = 1,
  
  [Parameter(Mandatory=$true, Position=1)]
  [Int32]$End
)

$FileName = Convert-Path $FileName
if ($Begin -gt $End) {
  Write-Warning "index is out of range."
  break
}

$$ = Select-String $FileName -Pattern (
  '[{0:D4}|{1:D4}]start.wmv' -f $Begin, $End
) | Select-Object LineNumber
$top = $$[0].LineNumber - 8
$end = $$[1].LineNumber + 1

Select-String $FileName -Pattern "^" |
Where-Object {$_.LineNumber -gt $top -and $_.LineNumber -le $end} |
Select-Object Line -ExpandProperty Line |
Out-File out.txt -Encoding ASCII
И далее:
Код: Выделить весь код
PS E:\sandbox> .\source.ps1 D:\test\myfile.txt -Begin 2 -End 3
Получим в папке E:\sandbox файл out.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>
------------------------------------------------------------
<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>
------------------------------------------------------------
Чтобы данные считываль с самого начала:
Код: Выделить весь код
PS E:\sandbox> .\source.ps1 D:\test\myfile.txt -End 2
Получим:
Код: Выделить весь код
<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>
------------------------------------------------------------
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:23, 18-02-2016 | #2



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

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


Ветеран


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

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


Спасибо, получилось одиночно запустить файл с основным кодом и выполнить. А куда нужно второй маленький код вписывать? в отдельный файл?
Я сделал отдельный файл: 1.ps1

Код: Выделить весь код
PS "C:\WORK\video films"> .\diapazon.ps1 posts.txt -Begin 2 -End 3
и запускаю его. В итоге очищается файл diapazon.ps1 (это файл с основным кодом) и все

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


Забанен


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

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


Alexander_88, вообще-то:
Код: Выделить весь код
PS E:\sandbox> .\source.ps1 D:\test\myfile.txt -Begin 2 -End 3
пример запуска сценария в хосте PowerShell.
Это сообщение посчитали полезным следующие участники:

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


Ветеран


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

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


спасибо, наконец - то получилось, с помощью бат файла параметры передал в скрипт

Отправлено: 14:59, 19-02-2016 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Любой язык - Распределение блоков текста из одного тхт файла по нескольким Alexander_88 Скриптовые языки администрирования Windows 2 19-02-2016 15:03
CMD/BAT - [решено] копирование указанного количества случайных блоков текста из текстового файла Alexander_88 Скриптовые языки администрирования Windows 7 26-08-2014 18:36
C/C++ - С :запись из одного файла в другой только часть строки alfaw Программирование и базы данных 1 07-07-2013 23:40
CMD/BAT - [решено] Помогите скопировать определённе символы с одного файла в другой. kolkin-alexandr Скриптовые языки администрирования Windows 5 15-03-2013 15:37
CMD/BAT - [решено] Как скопировать имя файла из текстового файла в код батника и т.д. Nun-Nun Скриптовые языки администрирования Windows 6 13-05-2009 13:28




 
Переход