Создание .bar файлов из .txt файла с командами

Обсуждение вопросов автоматизации Total Commander с помощью сторонних программ и скриптовых технологий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Loopback при тестирование я обнаружил пару ньюансов
1. Когда скрипт доходит до строк, то дальше не считает
buttonN=
iconicN=0
это есть пустая кнопка (пробел)
2. Можно ли сделать так: считать началом новой панели при нахождении строки button1, [Buttonbar] - не всегда является началом
3. Вести подсчёт для Buttoncount= тоже по номеру строки buttonN

Немножко сам подкорректировал:

Код: Выделить всё

$text = FileRead(@ScriptDir & "\WinBars.txt") 

$aBarData = StringSplit($text, "[Buttonbar]", 1) 

$nBarCount = 1 
For $i = 1 To $aBarData[0] 
    $sBarName = StringFormat("bar%03d.bar", $nBarCount) 
    $counter = 1 
    While 1 
        $sss = StringRegExp($aBarData[$i], "(?m)^button" & $counter & "=(.+)$", 1) 
        If IsArray($sss) Then 
            IniWrite($sBarName, "Buttonbar", "Buttoncount", $counter) 
            IniWrite($sBarName, "Buttonbar", "button" & $counter, StringStripWS($sss[0], 3)) 

            $cmd = StringRegExp($aBarData[$i], "(?m)^cmd" & $counter & "=(.+)$", 1)
            If IsArray($cmd) Then IniWrite($sBarName, "Buttonbar", "cmd" & $counter, StringStripWS($cmd[0], 3))
 
            $menu = StringRegExp($aBarData[$i], "(?m)^menu" & $counter & "=(.+)$", 1)         
            If IsArray($menu) Then IniWrite($sBarName, "Buttonbar", "menu" & $counter, StringStripWS($menu[0], 3)) 

            $iconic = StringRegExp($aBarData[$i], "(?m)^iconic" & $counter & "=(.+)$", 1) 
            If IsArray($iconic) Then IniWrite($sBarName, "Buttonbar", "iconic" & $counter, StringStripWS($iconic[0], 3)) 

            $param = StringRegExp($aBarData[$i], "(?m)^param" & $counter & "=(.+)$", 1) 
            If IsArray($param) Then IniWrite($sBarName, "Buttonbar", "param" & $counter, StringStripWS($param[0], 3)) 

            $path = StringRegExp($aBarData[$i], "(?m)^path" & $counter & "=(.+)$", 1) 
            If IsArray($path) Then IniWrite($sBarName, "Buttonbar", "path" & $counter, StringStripWS($path[0], 3)) 
        Else 
            ExitLoop 
        EndIf 
        $counter += 1 
    Wend 
    If $counter > 1 Then 
        $nBarCount +=1 
    EndIf 
Next
И изменил табличный файл, теперь выдаётся более корректный файл с коммандами:
http://rghost.ru/download/1495997/3449b ... inBars.zip
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Andrey_A писал(а):1. Когда скрипт доходит до строк, то дальше не считает
это есть пустая кнопка (пробел)
Т.е. любой элемент button, у которого пустое значение - это пустая кнопка?
Andrey_A писал(а):2. Можно ли сделать так: считать началом новой панели при нахождении строки button1, [Buttonbar] - не всегда является началом
Странно это как-то (насчет Buttonbar). Можно, конечно, но придется переделать.

Так какая все-таки должна быть логика?
Допустим, встретили Button1, считаем это началом бара. Идем далее, собирая все элементы (неважно, с каким они значением счетчика) до тех пор, пока опять не встретится button1?
Andrey_A писал(а):3. Вести подсчёт для Buttoncount= тоже по номеру строки buttonN
Тут хранится число фактически имеющихся элементов. А значит , сколько их будет в баре - столько должно стоять и тут.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Loopback я уже скрипт изменил (сначала задал вопросы, а потом оказалось и сам справился, благодаря тебе) и часть текстового файла тоже.
1. В файле перед каждой строкой button1= теперь [Buttonbar], и в скрипте как и раньше начало новой панели начинается с [Buttonbar]
2. Подсчёт к-ва кнопок в панели производится не по cmd, а по button
любой элемент button, у которого пустое значение - это пустая кнопка?
Пустой копкой считается:
buttonN=
iconicN=0
Спасибо ещё раз, всё работает
Den_Klimov
Сообщения: 207
Зарегистрирован: Пт ноя 03, 2006 11:27
Откуда: Ukraine.Kiev

Сообщение Den_Klimov »

Andrey_A писал(а):Loopback я уже скрипт изменил (сначала задал вопросы, а потом оказалось и сам справился, благодаря тебе) и часть текстового файла тоже.
1. В файле перед каждой строкой button1= теперь [Buttonbar], и в скрипте как и раньше начало новой панели начинается с [Buttonbar]
2. Подсчёт к-ва кнопок в панели производится не по cmd, а по button
любой элемент button, у которого пустое значение - это пустая кнопка?
Пустой копкой считается:
buttonN=
iconicN=0
Спасибо ещё раз, всё работает
Ну так выложи обновлённый скрипт! :)
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Подкорректированный скрипт выше или отдельно тут
http://forum.wincmd.ru/viewpost.php?p=62777
Ответить