|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » Скрипт для разбиения файла на части |
|
Скрипт для разбиения файла на части
|
Пользователь Сообщения: 135 |
Скрипт позволяет разбивать файл на части, которые в последствии можно объеденить с помощью пакетного
файла без нарушения внутреннего форматирования (см. команда Copy /?). После разбиения, скрипт создаёт пакетный файл "Combine all parts.bat" в том же директории куда копируются части. P.S. Надеюсь это кому нибудь пригодится. ![]() |
|
------- Отправлено: 09:00, 29-08-2009 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Diamond, есть одно замечание: желательно упомянуть, что слияние отдельных частей созданным пакетным файлом желательно производить на разделе с файловой системой NTFS, поскольку именно там записи о файлах в MFT хранятся в упорядоченном виде, именно в таком порядке они будут возвращаться по FindFirst/NextFile и обрабатываться командой «copy …».
На файловых системах FATxx (FAT16/FAT32; насчёт FAT12, полагаю, озадачиваться сим бессмысленно даже теоретически ![]() Вероятность этого исчезающе мала, но, тем не менее, существует. |
Отправлено: 06:33, 30-08-2009 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Iska, У меня на FAT32 объединяются без проблем, на NTFS проверить не могу(диск полностью "забит")
Изначально создаваемый пакетный файл не использовал подставные символы т.е. каждое имя части указывалось точно(part1+part2+... и т.д.), но в этом случае может возникнуть ошибка из-за ограничения на длину строки в пакетном файле. Ещё у меня возникала мысль использовать цикл "For" (в пакетном файле) чтобы обойти это ограничение но я отказался от этой идеи. |
------- Отправлено: 13:53, 30-08-2009 | #12 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Diamond:
![]() Вы отказались, а я сделал как раз с «FOR /L», и результат оказался весьма удручающ (на больших объёмах/количествах частей время росло в геометрической прогрессии, хотя, конечно, можно было и тут несколько сократить время, используя слияние попарно, но я этого не стал делать). Цитата:
В любом случае — отдельное спасибо: как бы то ни было, а Вы своим скриптом помогли мне осознать своё искреннее заблуждение в этом вопросе (что делать «copy /b *.parts …» всё-таки можно, выполнив предварительно некоторые телодвижения). |
||
Отправлено: 21:48, 30-08-2009 | #13 |
Пользователь Сообщения: 135
|
Профиль | Отправить PM | Цитировать Iska, Спасибо за подробное разъяснение ошибки слияния!
Отдельное спасибо за рабочий пример, имхо, главная привлекательность этой идеи, как раз и заключается в использовании пакетного файла. +5 |
------- Отправлено: 09:29, 31-08-2009 | #14 |
Новый участник Сообщения: 12
|
Профиль | Отправить PM | Цитировать Люди подскажите а как таким же с помобом с помощью bat разбить файл на несколько маленьких, после определенного слова например конец?
Очень нужно |
Отправлено: 17:08, 03-09-2012 | #15 |
![]() Новый участник Сообщения: 30
|
Профиль | Отправить PM | Цитировать Есть большой HTML файл. Одного текста только почти на 30 мегабайт. Разные части текста в файле разделены тегами-комментариями, например <!-- Post --> тут сам текст <!-- # Post -->.
Нужно каждую часть между этими тегами сохранить в отдельный файл. Имя файла не имеет значения, можно даже просто цифрами по порядку. Сидеть и копипастить уже заморился, а таких файлов несколько. |
Отправлено: 10:25, 14-05-2013 | #16 |
Старожил Сообщения: 254
|
Профиль | Отправить PM | Цитировать STARSsoft,
FileOperations.au3 #include <FileOperations.au3> $sPath = @ScriptDir & '\index.htm' $sText = FileRead($sPath) $aSplit = _StringSplitRegExp($sText, '<!-- Post -->.*?<!-- # Post -->') For $i = 1 To $aSplit[0] $sPathNew = _FO_GetCopyName($sPath, 1) $hFile = FileOpen($sPathNew, 2) FileWrite($hFile, $aSplit[$i]) FileClose($hFile) Next ; http://www.autoitscript.com/forum/topic/139260-autoit-snippets/?p=1065198 ; http://www.autoitscript.com/forum/topic/139260-autoit-snippets/page__st__140#entry1036931 ; http://www.autoitscript.com/forum/topic/65662-stringsplitregexp/ ; Автор ..........: AZJIO Func _StringSplitRegExp($sString, $sPattern, $flag = 0, $sIncludeMatch = 0, $iCount = 0) Local $sSplit, $sDelim, $sReplace, $Toggle, $iPos = 1 If IsBinary($sString) Then $sString = Hex($sString) $sDelim = Chr(1) Local $aError[2] = [1, $sString] Else Local $aError[2] = [1, $sString] For $i = 1 To 30 $Toggle = Not $Toggle If $Toggle Then ; 1, 30, 3, 28 ... 27, 4, 29, 2 $sDelim &= Chr($i) Else $sDelim &= Chr(32 - $i) EndIf $iPos = StringInStr($sString, $sDelim, 1, 1, $iPos) ; смещение позволяет найти разделитель за 1 проход If Not $iPos Then ExitLoop ; если вхождение не найдено, то разделитель сформирован Next If $iPos Then Return SetError(1, 0, $aError) EndIf Switch $sIncludeMatch Case 0 $sReplace = $sDelim Case 1 $sReplace = "$0" & $sDelim Case 2 $sReplace = $sDelim & "$0" EndSwitch $sSplit = StringRegExpReplace($sString, $sPattern, $sReplace, $iCount) If @error Then Return SetError(2, @extended, $aError) If Not @extended Then Return SetError(3, 0, $aError) If $flag Then $flag = 2 Return StringSplit($sSplit, $sDelim, 1 + $flag) EndFunc ;==>_StringSplitRegExp |
Последний раз редактировалось AZJIO, 24-05-2013 в 09:34. Отправлено: 19:28, 14-05-2013 | #17 |
Старожил Сообщения: 254
|
Профиль | Отправить PM | Цитировать STARSsoft, перечитал твой пост. Я ошибся, тот вариант использует текст как разделитель. Вот обычное регулярное выражение, которое возвратит текст между тегами в массив.
#include <FileOperations.au3> $sPath = @ScriptDir & '\index.htm' $vText = FileRead($sPath) $vText=StringRegExp($vText, '<!-- Post -->(.*?)<!-- # Post -->', 3) For $i = 0 To UBound($vText)-1 $sPathNew = _FO_GetCopyName($sPath, 1) $hFile = FileOpen($sPathNew, 2) FileWrite($hFile, $vText[$i]) FileClose($hFile) Next |
Отправлено: 01:42, 17-05-2013 | #18 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Нужен скрипт для autoit для раскопирования файла | irk72ag | Автоматическая установка приложений | 3 | 19-06-2009 15:27 | |
Мультимедиа - [решено] Программа для разбиения mp3 по папкам | arseniiavr | Программное обеспечение Windows | 4 | 06-02-2009 22:42 | |
подгрузка части кода на html-страницу из отдельного файла | shmond | Вебмастеру | 3 | 04-04-2007 16:43 | |
Скрипт для поиска файла | Pavlov10 | Программирование и базы данных | 3 | 02-03-2006 11:51 | |
Как собрать 2 части avi-файла в один? | mitino | Хочу все знать | 7 | 08-11-2003 00:14 |
|