Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Объединение файлов попарно, исходя из их размера

 
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander printer-friendly view
View previous topic :: View next topic  
Author Message
DocWeb



Joined: 10 Sep 2011
Posts: 10

Post (Separately) Posted: Wed Jan 11, 2012 16:25    Post subject: Объединение файлов попарно, исходя из их размера Reply with quote

Приветствую всех.

Возникла необходимость в автоматизации следующей задачки.

В панели ТС отсортированные по размеру файлы.
Необходимо объединить их попарно, самый большой (первый) с самым маленьким (последний).
Результат логично после объединения переместить в другой каталог (выделенный в другой панели ТС или заданный через параметры).

Пожелание. При объединении файлов добавлять произвольный постоянный текст (например "--разрыв файла--" или иной) между содержимым объединенных файлов.

Файлы текстовые, имена разные, расширение txt, число файлов в папке будет четное, объединять нужно все файлы.
Файл получаемый может иметь имя любого из объединенных, не критично.

Спасибо.
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Wed Jan 11, 2012 18:25    Post subject: Reply with quote

DocWeb wrote:
самый большой (первый) с самым маленьким (последний)
Только первый и последний или каждый убывающий до середины с каждым возрастающим до середины?
И для чего такая странная задача требуется?
Back to top
View user's profile Send private message
DocWeb



Joined: 10 Sep 2011
Posts: 10

Post (Separately) Posted: Wed Jan 11, 2012 19:30    Post subject: Reply with quote

да, каждый убывающий и каждый возрастающий, до середины.

задача - есть куча файлов с текстами.
нужно сделать их примерно одинакового размера все. не теряя смысла и целостности самого содержимого в каждой части.
файлов тысячи. вручную объединять совсем утомительно...
Back to top
View user's profile Send private message
Avada



Joined: 01 Aug 2008
Posts: 10415
Location: Россия, Саратов

Post (Separately) Posted: Wed Jan 11, 2012 21:03    Post subject: Reply with quote

DocWeb
Действительно, странная задача, и я тоже не понимаю — зачем. Что, размер файлов — самоцель? Ну, было тысяча, объединили тексты произвольно по парам, стало пятьсот и более близкого размера — и что? Как, например, потом искать, что в какую пару попало?
_________________
Даже самая богатая фантазия
Не представит себе наши безобразия.
Back to top
View user's profile Send private message
DocWeb



Joined: 10 Sep 2011
Posts: 10

Post (Separately) Posted: Wed Jan 11, 2012 21:30    Post subject: Reply with quote

Есть куча файлов с размером от 500 до 1кб.
итоговый файл не должен быть менее 1.5кб.
все более крупные уже были отобраны до этого.
каждый файл - некий текст, новость например, анекдот или еще что-то.
главное - результирующий файл не должен быть менее 1.5кб.
если объединять попарно могут быть и 1кб (2 по 500) и 2кб (1+1кб).
т.е. можно просто попарно пообъединять, потом опять отобрать меньше 1.5 и опять их попарно... не спорю.
но я все равно не знаю автом.решения такой задачи.
потому и спрашиваю. может кто поможет...
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jan 12, 2012 05:25    Post subject: Reply with quote

DocWeb
Исходная цель так и не была названа.
Я иду в продуктовый, чтобы запастись продуктами для приёма пиши, а не для раскладывания этих продуктов по полочкам холодильника.
Нужно ответить на следующие вопросы:
1) Зачем нужны приблизительно равные по размеру файлы? Какая от этого польза?
2) Почему нужно объединять именно попарно, а не по четыре, по шесть и т.д.?
3) Какова реальная тематика содержимого объединяемых файлов?
4) Зачем требуется указывать место склейки? Что это даст?

И разделитель лучше какой: текст или пустая строка + текст + пустая строка ?


Last edited by Flasher on Thu Jan 12, 2012 10:06; edited 1 time in total
Back to top
View user's profile Send private message
DocWeb



Joined: 10 Sep 2011
Posts: 10

Post (Separately) Posted: Thu Jan 12, 2012 08:17    Post subject: Reply with quote

Flasher

есть архив оффлайн-газеты. нужно его, архив выложить на сайт. архив представляет собой огромное количество текстовых файлов, 1 файл = 1 заметке/новости.

требование - размер статьи должен быть не 1.5кб. все статьи/заметки что больше этого размера отобраны уже.
остальные (меньше 1.5) и остались необработанными.

так как статьи/заметки имеют размер от 100 байт до 1499, то объединение самого маленького и самого большого заведомо будет более 1.5.
если объединять больше файлов - теряется читаемость и удобство.

новостная тематика. примерно такого вот плана.
"31 ноября. Мер встретился с горожанами.
Сегодня наш мер провел запланированную встречу....."

место склейки потом будет преобразовано, если сразу нельзя в конструкцию вида
Code:
<p> </p>
- чтоб раздвинуть новости друг от друга на один абзац, для удобства читаемости.
разделитель любой, но оптимально
Code:
<p></p>
Back to top
View user's profile Send private message
Flasher



Joined: 06 Nov 2009
Posts: 14229
Location: Москва

Post (Separately) Posted: Thu Jan 12, 2012 09:19    Post subject: Reply with quote

Вот это уже более менее понятно.
Можно не выделять и не сортировать:
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
View user's profile Send private message
DocWeb



Joined: 10 Sep 2011
Posts: 10

Post (Separately) Posted: Thu Jan 12, 2012 11:01    Post subject: Reply with quote

Flasher
спасибо! работает. уже второй раз мне помогаете.
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Автоматизация Total Commander All times are GMT + 4 Hours
Page 1 of 1

 
Jump to:  
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