Volniy

|
Posted: Wed Jan 12, 2005 21:25 Post subject: |
|
|
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 |
|