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: Fri Feb 04, 2005 23:41    Post subject: Reply with quote

Другой скрипт (3-ая версия, можно взять его отсюда) . Создает многострочные files.bbs. Упрощенный: без рекурсии и без обработки уже существующих записей в файле .bbs. Цифра в выражении Space(2) определяет отступ строк в многострочных комментариях. Меньше 2 не делать, ибо не работает. Строка dos="..." это сконвертированная в DOS-кодировку строчка win="..." (тут в HTML она глючит). В коде отмечены две строки, которые при комментировании убирают URL загрузки и дату сохранения файла соответственно.
Code:
'=========================[ Start of file ]=========================

'  File:         LogsToFileBBS.vbs
'  Description:  Вычитывает описания файлов из FlasGet-овских
'                log-ов в указанной папке и  заносит их
'                в стандартный Files.bbs в этой папке
'  Installation: Создайте кнопку на панели TC
'                Команда: "диск:\путь\к\файлу\LogsToFileBBS.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 EditFilesBBS(Fso.GetFolder(WScript.Arguments(0)))
   MsgBox "Операция успешно завершена." & vbCr & _
   "Всего LOG-файлов FlashGet: " & LogsCnt, vbInformation, "Сообщение"
End If

Set Fso = Nothing
WScript.Quit


Sub EditFilesBBS(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 FilesBBSFromLOG(curFolder.Path, F.Path) Then
           
            '  Переименование LOG в TXT
            '  F.Name = Fso.GetBaseName(F.Name) & ".txt"
           
            '  или просто их удаление:
            '  F.Delete True
         End If
         
      End If
     
   Next
   
End Sub

 Function FilesBBSFromLOG(Path, LogFile)
   
   Dim dscNew, tmp, forFile, IsFlashLOG
   Dim DateTime, URL
   Dim TS1, TS2, Entry, pos, pos2, TargetION
   
   TargetION = Fso.BuildPath(Path, "FILES.BBS")
   Const ForReading = 1, ForWriting = 2
   
   ' Ищем описание для файла в log-файле
   Set TS1 = Fso.OpenTextFile(LogFile, ForReading)
   
   Do While TS1.AtEndOfStream <> True
      tmp = TS1.ReadLine
     
      'URL:
      pos2 = InStr(1, tmp, "URL:", vbTextCompare)

      If pos2 Then
         URL = Mid(tmp, pos2 + Len("URL:"))     ' Нашли URL и сохранили
         IsFlashLOG = IsFlashLOG + 1
      End If
     
      'Время Сохранения:
      pos2 = InStr(1, tmp, "Время Сохранения:", vbTextCompare)

      If pos2 Then
         DateTime = Mid(tmp, pos2 + Len("Время Сохранения:"))   ' Нашли Время Сохранения
         IsFlashLOG = IsFlashLOG + 1
      End If
     
      'Имя:
      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 = 4 Then       ' За 1-ой строкой комментария - тоже комментарий
         Entry = Entry & vbCrLf & Space(2) & "| " & tmp
      End If
     
   Loop
   
   ' Закомментируйте ненужные Вам строки:
   Entry = Entry & vbCrLf & Space(2) & "| " & URL
   Entry = Entry & vbCrLf & Space(2) & "| " & DateTime
   
   TS1.Close
   Set TS1 = Nothing
   
   If Not Fso.FileExists(Fso.BuildPath(Path, forFile)) Then Exit Function   
   
   If Len(Entry) Then                  ' Если комментарий был найден
     
      ' Добавляем имя описываемого файла в формате 8.3
      Dim aFile

      Set aFile = Fso.GetFile(Fso.BuildPath(Path, forFile))
      Entry = WIN2DOS(aFile.ShortName & " " & Entry)
     
      tmp = ""
      If Fso.FileExists(TargetION) Then     ' Если уже есть файл FILES.BBS
         Set TS2 = Fso.OpenTextFile(TargetION, ForReading)
         tmp = TS2.ReadAll & vbCrLf    ' Добавим перевод строки на всякий пожарный
         TS2.Close
      End If
     
      dscNew = tmp & Entry
     
      On Error Resume Next
      Set TS2 = Fso.OpenTextFile(TargetION, ForWriting, True)
      TS2.Write dscNew                 ' Пишем целевой файл файл
      TS2.Close
   End If
   
   Set TS2 = Nothing
   ' Возвратим True, если это был действительно FlashGet-овский LOG
   FilesBBSFromLOG = CBool(IsFlashLOG = 4)
   
End Function

Function WIN2DOS(InputText)
   
   Const win = "абвгдежзийклмнопрстуфхцчшщъыьэюяёАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯЁ"
   Const dos = " ЎўЈ¤Ґ¦§Ё©Є«¬­®ЇабвгдежзийклмнопсЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—˜™љ›њќћџр"
   Dim tmp, i, pos, char
   
   For i = 1 To Len(InputText)
      char = Mid(InputText, i, 1)
      pos = InStr(1, win, char)
     
      If pos > 0 Then
         tmp = tmp & Mid(dos, pos, 1)
      Else
         tmp = tmp & char
      End If

   Next
   
   WIN2DOS = tmp
   
End Function

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


Last edited by Volniy on Wed Apr 13, 2005 12:51; edited 4 times in total
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group