View previous topic :: View next topic |
Author |
Message |
Andrey_A
Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Sun Sep 19, 2010 20:37 Post subject: Структурирование файла главного меню Total Commandera |
|
|
Тут, намедни, смотрел, разбирал файлы 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 |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10325 Location: Россия, Саратов
|
(Separately) Posted: Sun Sep 19, 2010 20:57 Post subject: |
|
|
Andrey_A
Не понял саму постановку проблемы. Что означает "по первой строке либо как попало", что конкретно предлагается взамен и что вообще понимается здесь под структурированием? Желательно уяснить это не из созерцания скрипта, а из удобопонятного комментария к оному.
Кстати, в конце скрипта, наверное "копия файлов"? _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Andrey_A
Joined: 10 Apr 2009 Posts: 394 Location: Сочи
|
(Separately) Posted: Sun Sep 19, 2010 21:22 Post subject: |
|
|
Поправил "по первому столбцу".
Дополняю. Вот я просматриваю файл меню и смотрю, а в нём команды записаны таким вот образом - без отступов на разных уровнях: 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 ""
|
К примеру, тот же самый скрипт я бы выложил без пробелов, без отступов... |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10325 Location: Россия, Саратов
|
(Separately) Posted: Sun Sep 19, 2010 21:34 Post subject: |
|
|
Andrey_A
Угу, теперь стало несколько понятнее. Хотя, скажем, в нашей русификации для меню отступы используются и принцип "чем глубже — тем правее" вроде бы никогда не нарушался. А для разбирательства с меню лично я предпочитаю Main Menu Editor, где вся эта структура отображается в виде дерева и отступов не быть просто не может. Впрочем, это дело вкуса, конечно. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
Flasher
Joined: 06 Nov 2009 Posts: 14229 Location: Москва
|
(Separately) Posted: Sun Sep 19, 2010 22:33 Post subject: |
|
|
Avada wrote: | А для разбирательства с меню лично я предпочитаю Main Menu Editor | В котором до сих пор не решена проблема с юникодностью mnu.
Поэтому отдаю дань уважения проделанной работе Андрея. Молодец! |
|
Back to top |
|
|
Avada
Joined: 01 Aug 2008 Posts: 10325 Location: Россия, Саратов
|
(Separately) Posted: Sun Sep 19, 2010 22:53 Post subject: |
|
|
Flasher wrote: | В котором до сих пор не решена проблема с юникодностью mnu. |
Для начала его надо убедить, что это в самом деле проблема, требующая безусловного решения... Впрочем, поскольку начался очередной этап моего общения с автором по поводу новой версии пакета, мы к этому вопросу ещё вернёмся. Но не здесь и не сейчас. _________________ Даже самая богатая фантазия
Не представит себе наши безобразия. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|