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: Структурирование файла главного меню Total Commandera 
Author Message
Andrey_A



PostPosted: Sun Sep 19, 2010 20:37    Post subject: Структурирование файла главного меню Total Commandera Reply with quote

Тут, намедни, смотрел, разбирал файлы Wcmd_*.mnu разных языков и сборок... и пришла идея о создании скрипта по структурированию файла. В большинстве того, что я видел структура была либо по первому столбцу, либо как попало. Да и свой файл, в котором 3300 строк руки не добирались всё расставить на свои места. А после использования этого скрипта смотреть такие файлы стало намного веселее и приятнее. Испытывал примерно на 40 разных файлах, всё работает, но если будут какие-то дополнения со стороны профессионалов, я всегда за!
Code:
'===============================================================
' Структурирование файла Wcmd_*.MNU главного меню Total Commandera
' В параметрах вызова из TC должен быть прописано путь к файлу:
' "%%COMMANDER_PATH%%\Language\Wcmd_Rus.mnu"
' или открывать его подкурсором %P%N
' Автор Аверин Андрей 2010
'===============================================================
Option Explicit
Dim FSO, ListFile, SetList, Text, MyFile, i,k,sym,FF,F,P,L,ContrStr,Stroka,Probel,Space
Set FSO = CreateObject("Scripting.FileSystemObject")
     With WScript
         FF   = .Arguments(0)
      End With
         F = FSO.GetAbsolutePathName(CreateObject("WScript.Shell").ExpandEnvironmentStrings(FF))
         Set ListFile = FSO.OpenTextFile(F, 1)
  Text =  ""
  ContrStr = 0
  Space = 7           'изменить если нужен отступ больше или меньше
  P = 0                   
  Do While Not ListFile.AtEndOfStream
     SetList = ListFile.ReadLine
       Stroka = ""
       Probel = ""
       
       For i = 1 To Len(SetList)
                 sym = mid(SetList,i,1)
                      If sym = "P" or sym = "M" or sym = "E" or sym = "S" or sym = "H"or sym = ";" Then
                           If   sym = ";" Then
                                    L = 0
                           End If
                             k = i
                             i = Len(SetList)                       
                      End If
      Next
   If  SetList <> "" Then
       For i = k To Len(SetList)
                 sym = mid(SetList,i,1)
                 Stroka = Stroka & sym                       
      Next
   End If   
                      If P < 0 Then P = 0
                     
                      If  mid(Stroka ,1,1) = "P" Then
                                If  ContrStr = 1 Then
                                       P = P + Space
                                End If
                          L = P
                          ContrStr = 1
                      End If
                     
                      If  mid(Stroka ,1,1) = "M" Then
                                If  ContrStr = 2 Then
                                       P = P - Space
                                       ContrStr = 1
                                End If                     
                             L = P + Space
                      End If

                      If  Stroka = "MENUITEM SEPARATOR" Then
                                If  ContrStr = 2 Then
                                       P = P - Space
                                       ContrStr = 1
                                End If                     
                             L = P + Space*2
                      End If

                      If  mid(Stroka ,1,1) = "E" Then
                                If  ContrStr = 2 Then
                                       P = P - Space
                                End If
                          L = P
                          ContrStr = 2
                      End If                     

          For i = 1 To L
                Probel = Probel & " "   
          Next
             Text = Text & Probel & Stroka & vbNewLine
             L = 0
Loop

  FSO.CopyFile F, F & ".bak" ' За\Рас комментируйте если нужна копия файла
  Set MyFile= fso.CreateTextFile(F, True)
   MyFile.Write(Text)

   ListFile.Close
   Set ListFile = Nothing
   Set FSO = Nothing
   WScript.Quit


Last edited by Andrey_A on Sun Sep 19, 2010 21:05; edited 1 time in total
View user's profile Send private message Send e-mail Visit poster's website ICQ Number


Powered by phpBB © 2001, 2005 phpBB Group