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

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

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

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

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

Сообщение Andrey_A »

Есть текстовый файл, который является результатом Excel, который имеет всё, чтобы создать .bar файлы, помогите пожалуйста автоматически создать в папке %COMMANDER_PATH%\BARS\ .bar файлы bar1.bar, bar2.bar, bar3.bar... пытался создать скрипт, но мозгов не хватает, спасибо за понимание, ссылка для скачивания файла:
http://depositfiles.com/files/kwf6o0u0i
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Andrey_A
Советую не использовать deposit как средство аплоудинга. Не у всех стоит динамический IP, что чревато выводом сообщений "В настоящее время с вашего IP адреса уже идет скачивание". Для задач схожего рода предлагаю более разумные решения: zalil либо rghost.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Flasher других обменников не знал, теперь буду знать, спасибо, вот ссылки:
http://slil.ru/29047785/6b33398f.4bd8b490/WinBars.zip
http://rghost.ru/download/1487772/54394 ... inBars.zip
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

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

Сообщение Andrey_A »

Конечно знал... :D Просто не требовалось другого, тем более в моей сборке на deposit сделана команда... специально для тебя организую ещё кнопки в меню... и буду пользоваться
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Andrey_A писал(а):специально для тебя организую ещё кнопки в меню... и буду пользоваться
:) Как-то несуразно звучит, организуешь для меня, а пользоваться будешь сам.)) Тут хотя бы выложи для проформы. :wink:
Аватара пользователя
Flasher
Сообщения: 14229
Зарегистрирован: Пт ноя 06, 2009 00:33
Откуда: Москва

Сообщение Flasher »

Andrey_A писал(а):Есть текстовый файл, который является результатом Excel, который имеет всё, чтобы создать .bar файлы
Всё таки стоит расшифровать для скриптологов, что подразумевается под этими словами. У каждого могут быть свои представления, о том, чем является результат Excel, и что такое "всё, чтобы создать bar-файлы". То, что очевидно для одних, для других может показаться тёмным лесом.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Всё таки стоит расшифровать для скриптологов
Я думаю, для скриптологов будет и так всё понятно, изходя из файла,
и для тех кто его видел. Если необходимо поясню:
1. Я редактирую меню через табличный файл, что отражено подробно в теме и где есть дополнительные ссылки на скачивание:
http://forum.wincmd.ru/viewtopic.php?t= ... C%E5%ED%FE
2. Я составил второй табличный фал, который считывает из первого всё необходимое для создания дополнительных меню (про excel я писал, чтобы не было вопросов про большие строчные пробелы в файле)
3. Решение вопроса, как я его вижу, я не хочу описывать - зачем наставлять - те кто хочет помочь, тот поможет[/quote]
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Сделать то, конечно, можно. Только нужно время.
Может быть помогу, но скоро не обещаю.

Я правильно понял, что секцией [Buttonbar] начинвется новая панель?

И хорошо бы, чтобы в файле было поменьше мусора - всяких там пустых строк и строк с содержимым "#ЗНАЧ!". Строка с "Buttoncount=" тоже ни к чему. Чем меньше в скрипте будет проверок, тем быстрее он будет готов ;)
Нет, я не сплю. Я просто медленно моргаю.
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Batya ты прав, надо подчистить файл
1. Убрать все пустые строки
2. Убрать мусор "#ЗНАЧ!"
3. Убрать Buttoncount=
4. Можно ещё убрать и [Buttonbar] и новую панель начинать при нахождении button1= - так меньше, я думаю будет проверок
ссылка на файл без мусора:
http://rghost.ru/download/1494836/b7d9a ... leaner.zip
Аватара пользователя
Batya
Сообщения: 2236
Зарегистрирован: Ср дек 15, 2004 09:51
Откуда: Москва, Россия

Сообщение Batya »

Andrey_A писал(а):4. Можно ещё убрать и [Buttonbar] и новую панель начинать при нахождении button1= - так меньше, я думаю будет проверок
[Buttonbar], думаю, лучше оставить. А ещё лучше использовать конструкцию вида [Buttonbar=Моя новая панель.bar] для имени файла панели (можно без ".bar").
Нет, я не сплю. Я просто медленно моргаю.
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Набросал скрипт на Autoit. Не очень красиво получилось, но работает. Берет только полезные строки, мусор игнорируется.

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

$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
        $cmd = StringRegExp($aBarData[$i], "(?m)^cmd" & $counter & "=(.+)$", 1)
        If IsArray($cmd) Then
            IniWrite($sBarName, "Buttonbar", "Buttoncount", $counter)
            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))
            $button = StringRegExp($aBarData[$i], "(?m)^button" & $counter & "=(.+)$", 1)
            If IsArray($button) Then IniWrite($sBarName, "Buttonbar", "button" & $counter, StringStripWS($button[0], 3))
            $iconic = StringRegExp($aBarData[$i], "(?m)^iconic" & $counter & "=(.+)$", 1)
            If IsArray($iconic) Then IniWrite($sBarName, "Buttonbar", "iconic" & $counter, StringStripWS($iconic[0], 3))
        Else
            ExitLoop
        EndIf
        $counter += 1
    Wend
    If $counter > 1 Then 
        $nBarCount +=1
    EndIf
Next
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Loopback! Спасибо за участие и за скорость, bar файлы делаются, единственное не хватает строк param и path, если возможно, добавь их в скрипт
Loopback
Сообщения: 1646
Зарегистрирован: Пн сен 07, 2009 09:29

Сообщение Loopback »

Точно, забыл.

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

$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
        $cmd = StringRegExp($aBarData[$i], "(?m)^cmd" & $counter & "=(.+)$", 1)
        If IsArray($cmd) Then
            IniWrite($sBarName, "Buttonbar", "Buttoncount", $counter)
            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))
            $button = StringRegExp($aBarData[$i], "(?m)^button" & $counter & "=(.+)$", 1)
            If IsArray($button) Then IniWrite($sBarName, "Buttonbar", "button" & $counter, StringStripWS($button[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))
            $iconic = StringRegExp($aBarData[$i], "(?m)^iconic" & $counter & "=(.+)$", 1)
            If IsArray($iconic) Then IniWrite($sBarName, "Buttonbar", "iconic" & $counter, StringStripWS($iconic[0], 3))
        Else
            ExitLoop
        EndIf
        $counter += 1
    Wend
    If $counter > 1 Then 
        $nBarCount +=1
    EndIf
Next
Аватара пользователя
Andrey_A
Сообщения: 394
Зарегистрирован: Пт апр 10, 2009 06:28
Откуда: Сочи
Контактная информация:

Сообщение Andrey_A »

Loopback огроооомное спасибо!!!
Ответить