Войти

Показать полную графическую версию : разбить файл на несколько по условию или по фильтру


shadowbat
10-09-2022, 23:52
не смог найти поиском, наверняка такая тема уже была?

как разбить файл по обычному простому условию?
например есть файл с содержимым "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
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
Powershell »
хм, похоже что этот скрипт:
считает перенос строки тоже разделителем, если несколько пустых строк подряд, то сливает их в один разделитель

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

shadowbat
11-09-2022, 12:30
или проще сделать разбиение по HEX ? в данном случае "0" = Hex(30)

DJ Mogarych
11-09-2022, 15:18
Можно в функции добавить -raw к командам, будет бить на нужное кол-во кусков в этом случае.

$blocks = ((gc $file -raw) -split "(?=$filter)") -ne ''

Но корректные файлы PNG это создавать всё равно не будет, тут надо колхозить что-то наподобие http://forum.oszone.net/thread-349315.html, используя sfk для работы с бинарными данными.

shadowbat
12-09-2022, 08:32
gc $file -raw »
может я что-то не так делаю, но у меня выходит только 1 файл и полностью пустой

DJ Mogarych
12-09-2022, 09:44
Да это всё равно бесполезно, т. к. подход неправильный - бинарные данные в текстовом режиме обрабатывать.
Я не сталкивался с подобными манипуляциями извлечения частей из PNG, но, судя по всему, вам нужно что-то вроде
pngsplit - split a PNG file into individual chunk-files (and check CRCs)
Это для линукса, но наверняка есть инструменты и для других систем.

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

DJ Mogarych
22-09-2022, 15:33
txt файл это тоже бинарный файл »
нет




© OSzone.net 2001-2012