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 

Single Post  Topic: вопрос про коментарии к файлам в DESCRIPT.ION 
Author Message
Volniy



PostPosted: Wed Jan 12, 2005 21:25    Post subject: Reply with quote

2SID
Вот, зацени-ка мой вариант конвертора LOG-ов в Descript.ion. Если FlashGet не русифицирован, надо будет заменить "Комментарий:" и "Имя:" на английский вариант.
Code:
'=========================[ Start of file ]=========================

'  File:         LogToDescription.vbs
'  Description:  Вычитывает описания файлов из FlasGet-овских log-ов
'                в текущей папке и в каждой вложенной в нее, и
'                и заносит их в стандартный descript.ion
'  Installation: Создайте кнопку на панели TC
'                Команда: "диск:\путь\к\файлу\LogToDescription.vbs"
'                Параметры: "%P" [Внимание, именно в кавычках!]
'  Version:      3-я редакция, исправленная

'  Copyright:    (c) 2005, Volniy

Option Explicit

Dim Fso, LogsCnt

Set Fso = CreateObject("Scripting.FileSystemObject")

If Fso.FolderExists(WScript.Arguments(0)) = False Then
   MsgBox "Указана неверная директория!", vbCritical, "Ошибка"
Else
   Call ScanFolderForLog(Fso.GetFolder(WScript.Arguments(0)))
   MsgBox "Операция успешно завершена." & vbcr &  _
   "Всего LOG-файлов FlashGet: "& LogsCnt  , vbInformation, "Сообщение"
End If

Set Fso = Nothing
WScript.Quit

Sub ScanFolderForLog(curFolder)
   
   Dim SF
   
   For Each SF In curFolder.SubFolders
      ScanFolderForLog SF
   Next
   
   Call EditDescription(curFolder)
   
End Sub

 Function DescriptionFromLOG(Path, LogFile)
   Dim dscNew, dscOld, tmp, forFile, IsFlashLOG
   Dim TS1, TS2, NoAdd, Entry, pos, pos2, TargetION
   
   TargetION = Fso.BuildPath(Path, "DESCRIPT.ION")
   Const ForReading = 1, ForWriting = 2
   
   ' Ищем описание для файла в log-файле
   Set TS1 = Fso.OpenTextFile(LogFile, ForReading)
   
   Do While TS1.AtEndOfStream <> True
      tmp = TS1.ReadLine
     
      pos2 = InStr(1, tmp, "Имя:", vbTextCompare)
      If pos2 Then
         forFile = Mid(tmp, pos2 + Len("Имя:"))  ' Нашли имя и сохранили
         IsFlashLOG = IsFlashLOG + 1
      End If
      pos = InStr(1, tmp, "Комментарий:", vbTextCompare)

      If pos Then
         Entry = Mid(tmp, pos + Len("Комментарий:")) ' Комментарий сохранили в Entry
         IsFlashLOG = IsFlashLOG + 1
      ElseIf IsFlashLOG = 2 Then    ' Все за 1-ой строкой комментария - тоже комментарий
         Entry = Entry & " " & tmp
      End If

   Loop
   
   TS1.Close
   Set TS1 = Nothing
   
   If Len(Entry) Then                  ' Если комментарий был найден
     
      ' Добавляем имя файла (при пробеле в имени - в кавычках)
      If InStr(1, forFile, " ") Then forFile = """" & forFile & """"
      Entry = forFile & " " & Entry
      If Fso.FileExists(TargetION) Then     ' Если уже есть файл Description
         Set TS2 = Fso.OpenTextFile(TargetION, ForReading)
         
         Do While TS2.AtEndOfStream <> True
            tmp = TS2.ReadLine
           
            If InStr(1, tmp, forFile, vbTextCompare) Then
               tmp = Entry             ' Подменяем, если там уже есть старый комментарий
               NoAdd = True            ' и отмечаем, что добавлять новую строку уже не нужно
            End If
           
            dscNew = dscNew & tmp & vbCrLf  ' Готовим содержимое для Descript.ion
         Loop
         
         TS2.Close
         If NoAdd = False Then dscNew = dscNew & Entry
      Else
         ' Если файла DESCRIPT.ION нет, то будем создавать его с нуля
         dscNew = Entry                ' Запомним найденный комментарий
         
      End If
     
      On Error Resume Next
     
      Fso.GetFile(TargetION).Attributes = 0     ' Снимаем атрибуты
      Set TS2 = Fso.OpenTextFile(TargetION, ForWriting, True)
      TS2.Write dscNew                 ' Пишем целевой файл файл
      TS2.Close
      Fso.GetFile(TargetION).Attributes = 34    ' Скрытый и Архивный атр.
   End If
   
   Set TS2 = Nothing
   ' Возвратим True, если это был действительно FlashGet-овский LOG
   DescriptionFromLOG = CBool(IsFlashLOG = 2)

End Function

Sub EditDescription(curFolder)
   
   Dim F, fExt
   
   For Each F In curFolder.Files
      fExt = UCase(Fso.GetExtensionName(F.Name))
     
      If fExt = "LOG" Then
         LogsCnt = LogsCnt + 1
         ' Обработка исходного файла только если
         ' LOG был именно FlashGet-овский
         If DescriptionFromLOG(curFolder.Path, F.Path) Then
           
            '  Переименование LOG в TXT
            '  F.Name = Fso.GetBaseName(F.Name) & ".txt"
           
            '  или просто их удаление:
            '  F.Delete True
         End If
         
      End If
     
   Next
   
End Sub

'=========================[  End of file  ]=========================

В данном варианте строки, дающие возможность удалять или переименовывать LOG-и, закомментированы (на всякий случай).


Last edited by Volniy on Thu Jan 27, 2005 12:19; edited 2 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group