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

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

Ответить
Настройки темы
CMD/BAT - разбить файл на несколько по условию или по фильтру

Старожил


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

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


Изменения
Автор: shadowbat
Дата: 11-09-2022
не смог найти поиском, наверняка такая тема уже была?

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

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

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

Отправлено: 23:52, 10-09-2022

 

Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:23, 11-09-2022 | #2



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

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


Старожил


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

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



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

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

Последний раз редактировалось shadowbat, 11-09-2022 в 10:46.


Отправлено: 10:36, 11-09-2022 | #3


Старожил


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

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


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

Последний раз редактировалось shadowbat, 11-09-2022 в 13:33.


Отправлено: 12:30, 11-09-2022 | #4


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 15:18, 11-09-2022 | #5


Старожил


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

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


Цитата DJ Mogarych:
gc $file -raw »
может я что-то не так делаю, но у меня выходит только 1 файл и полностью пустой

Отправлено: 08:32, 12-09-2022 | #6


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 09:44, 12-09-2022 | #7


Старожил


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

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


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

Последний раз редактировалось shadowbat, 13-09-2022 в 13:18.


Отправлено: 20:49, 12-09-2022 | #8


Аватара для DJ Mogarych

fascinating rhythm


Moderator


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

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


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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Отправлено: 15:33, 22-09-2022 | #9



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] разбить текстовый файл на несколько по условию Rey71 Скриптовые языки администрирования Windows 28 24-01-2019 13:03
CMD/BAT - Разбить тхт файл не только по строкам, но и по папкам Abricosio Скриптовые языки администрирования Windows 23 13-07-2018 20:39
CMD/BAT - [решено] Создать несколько файлов из одного по условию Rey71 Скриптовые языки администрирования Windows 9 28-04-2018 08:13
CMD/BAT - [решено] разбить файл на много файлов по шаблону и каждый файл положить в папку Mezolick Скриптовые языки администрирования Windows 3 03-02-2017 08:38
CMD/BAT - [решено] Копирование строк в отдельный файл по условию Seryoga204 Скриптовые языки администрирования Windows 26 24-08-2016 23:33




 
Переход