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

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

Alexander_88 02-07-2019 22:56 2877841

Добавить блоки строк из одного txt файла в другие 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 файл).

:)

YuS_2 03-07-2019 08:30 2877864

Цитата:

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

насколько велико множество? :)

powershell
Код:

#requires -v 3.0

$map = 'd:\mapping.txt'
$in = 'd:\test.txt'
$del = "//==================`r?`n"

gc $map|%{$template,$file=@(),@()}{
        $tmp = ($_ -split " ?- ?").trim()
        $template += $tmp[0]
        $file += $tmp[1]
}
$arr = ((gc $in -raw) -split $del).trim("`r?`n")
for ($i=0;$i -lt $template.length;$i++){
        $arr|?{$_ -match $template[$i]}|out-file $file[$i] -app
}

где, формат файла mapping.txt
Код:

gsd - D:\video.txt
start - D:\clip.txt

ЗЫ Ни шаблоны, ни имена файлов, естественно, не должны содержать символа "-", иначе соответствие будет "сломано"...

Alexander_88 03-07-2019 10:32 2877882

Спасибо, работает. В поиске будут только буквы (без символов). :)

Alexander_88 05-07-2019 16:33 2878332

Подскажите, а как сделать, чтобы информация добавлялась в ansi
Я проверил, все работало на тест файлах (которые скрипт сам создал). Потом начал пробовать с рабочим txt, в него добавляется информация в одну строку.. этот txt я создавал давно, просто из windows "создать блокнот". Информация добавляется вроде как в юникоде, из - за этого все добавляется в одну строку. Можно конечно мой txt перекодировать в юникод, только дальше этот txt также уходит на обработку нескольких скриптов, поэтому неизвестно будет ли как раньше все работать, если я перекодирую его.
Нельзя сделать, чтобы информация добавлялась для txt как она есть, а не в одну строку?

Iska 05-07-2019 17:32 2878343

Alexander_88, действуйте как обычно — упаковываете Ваш файл/файлы в архив, каковой прикладываете к сообщению, або на обменник (например, DropMeFiles), а ссылку — сюда.

Alexander_88 05-07-2019 17:55 2878354

Вложений: 1
data - общий txt файл.
После выполнения скрипта видно, что данные добавляются в одну строку (в файлы fileslink, imagelink, har)

Код:

#requires -v 3.0

$map = 'mapping.txt'
$in = 'data.txt'
$del = "//================`r?`n"

gc $map|%{$template,$file=@(),@()}{
        $tmp = ($_ -split " ?- ?").trim()
        $template += $tmp[0]
        $file += $tmp[1]
}
$arr = ((gc $in -raw) -split $del).trim("`r?`n")
for ($i=0;$i -lt $template.length;$i++){
        $arr|?{$_ -match $template[$i]}|out-file $file[$i] -app
}


YuS_2 05-07-2019 19:16 2878367

Цитата:

Цитата Alexander_88
как сделать, чтобы информация добавлялась в ansi »

Только добавлялась или считывалась тоже?
Вот, настраивайте нужную кодировку:
Код:

#requires -v 3.0

$map = 'd:\mapping.txt'
$in = 'd:\test.txt'
$del = "//==================`r?`n"
$encin = 'default'
$encout = 'default'
$encmap = 'default'

gc $map -enc $encmap|%{$template,$file=@(),@()}{
        $tmp = ($_ -split " ?- ?").trim()
        $template += $tmp[0]
        $file += $tmp[1]
}
$arr = ((gc $in -raw -enc $encin) -split $del).trim("`r?`n")
for ($i=0;$i -lt $template.length;$i++){
        $arr|?{$_ -match $template[$i]}|out-file $file[$i] -app -enc $encout
}


Alexander_88 06-07-2019 00:15 2878404

Спасибо, работает :)


Время: 20:41.

Время: 20:41.
© OSzone.net 2001-