Структурирование файла главного меню Total Commandera
Select messages from
# through # FAQ
[/[Print]\]

Total Commander -> Секреты и советы

#1: Структурирование файла главного меню Total Commandera Author: Andrey_ALocation: Сочи PostPosted: Sun Sep 19, 2010 20:37
    —
Тут, намедни, смотрел, разбирал файлы 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

#2:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Sep 19, 2010 20:57
    —
Andrey_A
Не понял саму постановку проблемы. Что означает "по первой строке либо как попало", что конкретно предлагается взамен и что вообще понимается здесь под структурированием? Желательно уяснить это не из созерцания скрипта, а из удобопонятного комментария к оному.
Кстати, в конце скрипта, наверное "копия файлов"?

#3:  Author: Andrey_ALocation: Сочи PostPosted: Sun Sep 19, 2010 21:22
    —
Поправил "по первому столбцу".
Дополняю. Вот я просматриваю файл меню и смотрю, а в нём команды записаны таким вот образом - без отступов на разных уровнях:
Code:
POPUP ""
MENUITEM ""
POPUP ""
MENUITEM ""
POPUP ""
MENUITEM ""
END_POPUP ""
MENUITEM ""
END_POPUP ""
MENUITEM SEPARATOR
MENUITEM ""
END_POPUP ""

Меню само работает, всё хорошо, но разобраться в нём не всегда легко, а если меню несколько листов, а если есть несколько уровней вложенности, а если не дай бог какая-то ошибка, то теряешь кучу времени на то, чтобы разобраться...
Скрипт преобразует тоже меню следующим образом, что гораздо удобнее в работе и приятнее глазу
Code:
POPUP ""
     MENUITEM ""
          POPUP ""
               MENUITEM ""
                    POPUP ""
                         MENUITEM ""
                    END_POPUP ""
               MENUITEM ""
         END_POPUP ""
            MENUITEM SEPARATOR
     MENUITEM ""
END_POPUP ""

К примеру, тот же самый скрипт я бы выложил без пробелов, без отступов...

#4:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Sep 19, 2010 21:34
    —
Andrey_A
Угу, теперь стало несколько понятнее. Хотя, скажем, в нашей русификации для меню отступы используются и принцип "чем глубже — тем правее" вроде бы никогда не нарушался. А для разбирательства с меню лично я предпочитаю Main Menu Editor, где вся эта структура отображается в виде дерева и отступов не быть просто не может. Впрочем, это дело вкуса, конечно.

#5:  Author: FlasherLocation: Москва PostPosted: Sun Sep 19, 2010 22:33
    —
Avada wrote:
А для разбирательства с меню лично я предпочитаю Main Menu Editor
В котором до сих пор не решена проблема с юникодностью mnu.

Поэтому отдаю дань уважения проделанной работе Андрея. Молодец!

#6:  Author: AvadaLocation: Россия, Саратов PostPosted: Sun Sep 19, 2010 22:53
    —
Flasher wrote:
В котором до сих пор не решена проблема с юникодностью mnu.

Для начала его надо убедить, что это в самом деле проблема, требующая безусловного решения... Впрочем, поскольку начался очередной этап моего общения с автором по поводу новой версии пакета, мы к этому вопросу ещё вернёмся. Но не здесь и не сейчас.



Total Commander -> Секреты и советы


output generated using printer-friendly topic mod. All times are GMT + 4 Hours

Page 1 of 1

Powered by phpBB © 2001, 2005 phpBB Group