View previous topic :: View next topic |
Author |
Message |
DocWeb
Joined: 10 Sep 2011 Posts: 10
|
(Separately) Posted: Wed Jan 11, 2012 16:25 Post subject: Объединение файлов попарно, исходя из их размера |
|
|
Приветствую всех.
Возникла необходимость в автоматизации следующей задачки.
В панели ТС отсортированные по размеру файлы.
Необходимо объединить их попарно, самый большой (первый) с самым маленьким (последний).
Результат логично после объединения переместить в другой каталог (выделенный в другой панели ТС или заданный через параметры).
Пожелание. При объединении файлов добавлять произвольный постоянный текст (например "--разрыв файла--" или иной) между содержимым объединенных файлов.
Файлы текстовые, имена разные, расширение txt, число файлов в папке будет четное, объединять нужно все файлы.
Файл получаемый может иметь имя любого из объединенных, не критично.
Спасибо. |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Wed Jan 11, 2012 18:25 Post subject: |
|
|
DocWeb wrote: | самый большой (первый) с самым маленьким (последний) | Только первый и последний или каждый убывающий до середины с каждым возрастающим до середины?
И для чего такая странная задача требуется? |
|
Back to top |
|
 |
DocWeb
Joined: 10 Sep 2011 Posts: 10
|
(Separately) Posted: Wed Jan 11, 2012 19:30 Post subject: |
|
|
да, каждый убывающий и каждый возрастающий, до середины.
задача - есть куча файлов с текстами.
нужно сделать их примерно одинакового размера все. не теряя смысла и целостности самого содержимого в каждой части.
файлов тысячи. вручную объединять совсем утомительно... |
|
Back to top |
|
 |
Avada

Joined: 01 Aug 2008 Posts: 10415 Location: Россия, Саратов
|
(Separately) Posted: Wed Jan 11, 2012 21:03 Post subject: |
|
|
DocWeb
Действительно, странная задача, и я тоже не понимаю — зачем. Что, размер файлов — самоцель? Ну, было тысяча, объединили тексты произвольно по парам, стало пятьсот и более близкого размера — и что? Как, например, потом искать, что в какую пару попало? _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
 |
DocWeb
Joined: 10 Sep 2011 Posts: 10
|
(Separately) Posted: Wed Jan 11, 2012 21:30 Post subject: |
|
|
Есть куча файлов с размером от 500 до 1кб.
итоговый файл не должен быть менее 1.5кб.
все более крупные уже были отобраны до этого.
каждый файл - некий текст, новость например, анекдот или еще что-то.
главное - результирующий файл не должен быть менее 1.5кб.
если объединять попарно могут быть и 1кб (2 по 500) и 2кб (1+1кб).
т.е. можно просто попарно пообъединять, потом опять отобрать меньше 1.5 и опять их попарно... не спорю.
но я все равно не знаю автом.решения такой задачи.
потому и спрашиваю. может кто поможет... |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jan 12, 2012 05:25 Post subject: |
|
|
DocWeb
Исходная цель так и не была названа.
Я иду в продуктовый, чтобы запастись продуктами для приёма пиши, а не для раскладывания этих продуктов по полочкам холодильника.
Нужно ответить на следующие вопросы:
1) Зачем нужны приблизительно равные по размеру файлы? Какая от этого польза?
2) Почему нужно объединять именно попарно, а не по четыре, по шесть и т.д.?
3) Какова реальная тематика содержимого объединяемых файлов?
4) Зачем требуется указывать место склейки? Что это даст?
И разделитель лучше какой: текст или пустая строка + текст + пустая строка ?
Last edited by Flasher on Thu Jan 12, 2012 10:06; edited 1 time in total |
|
Back to top |
|
 |
DocWeb
Joined: 10 Sep 2011 Posts: 10
|
(Separately) Posted: Thu Jan 12, 2012 08:17 Post subject: |
|
|
Flasher
есть архив оффлайн-газеты. нужно его, архив выложить на сайт. архив представляет собой огромное количество текстовых файлов, 1 файл = 1 заметке/новости.
требование - размер статьи должен быть не 1.5кб. все статьи/заметки что больше этого размера отобраны уже.
остальные (меньше 1.5) и остались необработанными.
так как статьи/заметки имеют размер от 100 байт до 1499, то объединение самого маленького и самого большого заведомо будет более 1.5.
если объединять больше файлов - теряется читаемость и удобство.
новостная тематика. примерно такого вот плана.
"31 ноября. Мер встретился с горожанами.
Сегодня наш мер провел запланированную встречу....."
место склейки потом будет преобразовано, если сразу нельзя в конструкцию вида - чтоб раздвинуть новости друг от друга на один абзац, для удобства читаемости.
разделитель любой, но оптимально |
|
Back to top |
|
 |
Flasher

Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Thu Jan 12, 2012 09:19 Post subject: |
|
|
Вот это уже более менее понятно.
Можно не выделять и не сортировать:
Code: | '=====================================================================
' Попарное склеивание убывающих и возрастающих по размеру файлов
' Если выбран только один файл, то участвуют
' все текстовые файлы корня активной панели
' Параметры %L "%P" "<Путь получателя>" <расширение файлов>
' Пример: %L "%P" "%T" txt
' Автор - Flasher ©
'=====================================================================
With WScript.Arguments
If .Count = 0 Then WScript.Quit
List = .Item(0) : Path = .Item(1)
Targ = .Item(2) : Ext = .Item(3)
End With
If Right(Targ, 1) <> "\" Then Targ = Targ & "\"
L = vbNewLine
Set FSO = CreateObject("Scripting.FileSystemObject")
Mass = Split(FSO.OpenTextFile(List, 1).ReadAll, L)
Max = Ubound(Mass)
If Max = 1 Then
For Each F in FSO.GetFolder(Path).Files
If StrComp(Ext, FSO.GetExtensionName(F), 1) = 0 Then S = S & F & L
Next
Mass = Split(S, L) : Max = Ubound(Mass)
End If
If Max Mod 2 Then
MsgBox "Необходимо выбрать чётное число файлов!", 48,_
Space(32) & "Склеивание файлов" : Quit
End If
Set Dict = CreateObject("ADODB.Recordset")
Dict.Fields.Append "Name", 200, 255
Dict.Fields.Append "Size", 3 : Dict.Open
For Each F In Mass
If F <> "" Then
If Not FSO.FileExists(F) Then
MsgBox "Снимите выделение с каталогов!", 48,_
Space(22) & "Склеивание файлов" : Quit
End If
Dict.AddNew : Dict("Name") = F
Dict("Size") = CLng(FSO.GetFile(F).Size) : Dict.Update
End If
Next
Dict.Sort = "Size DESC"
Sort = Split(Dict.GetString, vbCr)
For i = 0 to Max/2 - 1
Str1 = Sort(i) : N1 = Left(Str1, InStrRev(Str1, vbTab) - 1)
Str2 = Sort(Max-i-1) : N2 = Left(Str2, InStrRev(Str2, vbTab) - 1)
FSO.OpenTextFile(Targ & FSO.GetFileName(N1), 2, True, -2).Write _
FSO.OpenTextFile(N1,,,-2).ReadAll & L & "<p></p>" & _
L & FSO.OpenTextFile(N2,,,-2).ReadAll
Next : Quit
Sub Quit : Set FSO = Nothing : Set Dict = Nothing : WScript.Quit
End Sub |
|
|
Back to top |
|
 |
DocWeb
Joined: 10 Sep 2011 Posts: 10
|
(Separately) Posted: Thu Jan 12, 2012 11:01 Post subject: |
|
|
Flasher
спасибо! работает. уже второй раз мне помогаете. |
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|