Компьютерный форум 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=351884)

shadowbat 10-09-2022 23:52 2992193

разбить файл на несколько по условию или по фильтру
 
не смог найти поиском, наверняка такая тема уже была?

как разбить файл по обычному простому условию?
например есть файл с содержимым "011102222203305555"
нужно разбить на файлы out1,out2,out3,out4 по условию "0" с содержимым:
Код:

0111
022222
033
05555

а 4 файла положить в отдельную папку рядом

а как еще и добавить параметр "включать фильтр в вывод или нет"
то есть содержимое будет такое: 0111 022222 033 05555 или такое 111 22222 33 5555

правда вместо "0" в реальном примере "‰PNG", то есть нужно склеенный PNG разбить

DJ Mogarych 11-09-2022 08:23 2992197

Powershell
Код:

function Split-Png {
param(
[parameter(mandatory=$true)]
$file,
[parameter(mandatory=$true)]
$filter,
$includeFilter
)
    if ($includeFilter) {
        $blocks = ((gc $file) -split "(?=$filter)") -ne ''
    }
    else {
        $blocks = ((gc $file) -split "$filter") -ne ''
    }
   
    $folder = (Get-Item $file).DirectoryName
    $c = 1
   
    $blocks |% {
        $_ |Out-File "$folder\out$c.png"
        $c++
    }
}

# Не включать фильтр
Split-Png -file "C:\temp\file.txt" -filter "0"

# Включить фильтр
Split-Png -file "C:\temp\file.txt" -filter "0" -includeFilter 1


shadowbat 11-09-2022 10:36 2992201

Вложений: 1
Цитата:

Цитата DJ Mogarych
Powershell »

хм, похоже что этот скрипт:
считает перенос строки тоже разделителем, если несколько пустых строк подряд, то сливает их в один разделитель

тестовый файл прикрепил
Файл 167224
"‰PNG" - делает 12 файлов вместо 3

shadowbat 11-09-2022 12:30 2992207

или проще сделать разбиение по HEX ? в данном случае "0" = Hex(30)

DJ Mogarych 11-09-2022 15:18 2992217

Можно в функции добавить -raw к командам, будет бить на нужное кол-во кусков в этом случае.
Код:

$blocks = ((gc $file -raw) -split "(?=$filter)") -ne ''
Но корректные файлы PNG это создавать всё равно не будет, тут надо колхозить что-то наподобие http://forum.oszone.net/thread-349315.html, используя sfk для работы с бинарными данными.

shadowbat 12-09-2022 08:32 2992240

Цитата:

Цитата DJ Mogarych
gc $file -raw »

может я что-то не так делаю, но у меня выходит только 1 файл и полностью пустой

DJ Mogarych 12-09-2022 09:44 2992245

Да это всё равно бесполезно, т. к. подход неправильный - бинарные данные в текстовом режиме обрабатывать.
Я не сталкивался с подобными манипуляциями извлечения частей из PNG, но, судя по всему, вам нужно что-то вроде
Цитата:

pngsplit - split a PNG file into individual chunk-files (and check CRCs)
Это для линукса, но наверняка есть инструменты и для других систем.

shadowbat 12-09-2022 20:49 2992305

Цитата:

Цитата DJ Mogarych
судя по всему, вам нужно что-то вроде »

нужно то, что заявлено в теме - разрезать файл бинарно по фильтру - текстовый "0" или хекс "30"
область применения - дело десятое
txt файл это тоже бинарный файл

DJ Mogarych 22-09-2022 15:33 2992842

Цитата:

Цитата shadowbat
txt файл это тоже бинарный файл »

нет


Время: 20:03.

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