сделать стартовой  |  добавить в избранное

   SciTE - редактор кода для программистов

Переменные в файлах .properties


Автор: mozers™ / Дата: 24.02.2006 / Комментариев: 1
Категория: FAQ, Основные настройки, Скрипты, VBS, JS, WSF и др.


Вы уже знаете что файлы .properties содержат настройки редактора.
И поэтому начинаете их анализировать и изменять как файлы .INI других программ.
Первое отличие от файлов .INI сразу бросается в глаза - нет привычных для нас секций. Параметр и его значение можно записать в любом месте файла. Более того - его можно задать в любом из файлов .properties. Действовать будет только самое нижнее по тексту значение.
Второе отличие - не столь заметно и часто сбивает с толку начинающих. Я имею в виду переменные.
В файлах .INI такие отсутствуют.
На самом деле, если в файле .INI мы увидим запись вида:
colour.number=fore:#C00000
то это однозначно нам говорит о том, что данный параметр задает цвет числовых значений.
В SciTE не все так однозначно.
На самом деле тут colour.number - всего лишь пользовательская переменная, которая может быть использована для реального задания цвета:
style.vb.2=$(colour.number)
а может быть и не использована автором настройки:
style.vb.2=fore:#C00000
Не зная этого ньюанса вы будете до посинения менять значение colour.number без всякого положительного результата.
Положение усугубляется тем, что на имена пользовательских переменных не наложено практически никаких ограничений и создатели файлов настроек дают им имена по образу и подобию реальных ключей. Хотя бы буковку какую впереди ставили или писали их заглавными буквами, ан нет - написано "colour.number" и поди разберись что это - реальный ключ или пользовательская переменная :( Один выход - внимательно читать документацию, поскольку реальные ключи в ней описаны.
Есть несколько переменных, значение которых SciTE знает и без вас. Это:
FilePath - Полный путь для текущего файла
FileDir - Папка текущего файла без отслеживания(trailing) слеша
FileName - Имя файла без расширения
FileExt - Расширение текущего файла
FileNameExt = $(FileName).$(FileExt)
SessionPath - Полный путь текущей сесии
CurrentSelection - Значение выделенного текста на данный момент
CurrentWord - Значение слова на котором символ каретки или около него
Replacements - Число замен сделанное полсдней коммендой замены
SelectionStartColumn - Столбец начала выделения
SelectionStartLine - Строка начала выделения
SelectionEndColumn - Столбец окончания выделения
SelectionEndLine - Строка окончания выделения
SciteDefaultHome - Папка где найден файл глобальных настроек
SciteUserHome - Папка где найден файл настроек пользователя
Их вы можете с успехом использовать в своих файлах настроек.

В заключение приведу маленький VBS скрипт (всего одна строчка), который вам подскажет реальное значение любой выделенной переменной:

Код:
'  Показывает действующее значение переменных $(название_переменной)
'
' Для подключения добавьте в свой файл .properties следующие строки:
' command.name.45.*.properties=Узнать значение выделенной переменной
' command.45.*.properties=wscript "$(SciteDefaultHome)\tools\value.vbs"
' command.input.45.*.properties=$(CurrentSelection)
' command.mode.45.*.properties=subsystem:windows,savebefore:no
' command.shortcut.45.*.properties=Alt+V
' -----------------------------------------------------------------------
MsgBox WScript.StdIn.ReadAll, vbInformation, "Значение выделенной переменной ="


Или еще один вариант на LUA (Cочинил его mimir):Код:
--~   Показывает действующее значение переменных $(название_переменной)
-~
-~ Для подключения добавьте в свой файл .properties следующие строки:
--~ command.name.45.*.properties=Узнать значение переменной
--~ command.45.*.properties=dofile "$(SciteDefaultHome)\tools\value.lua"
--~ command.mode.45.*.properties=subsystem:lua,savebefore:no
--~ command.shortcut.45.*.properties=Alt+V
-----------------------------------------------------------------------
print ('\n'..editor:GetSelText()..' = '..props['CurrentSelection'])

Версия для печати / Прочитано: 16452 раз(а)

Комментариев: 1 (rss)

1. shkezan / 11.05.2010 - 07:25
Решительно протестую! Ж)

Файлы *.properties не скрипты, а ключи name=value отнюдь не переменные.
Например, вы не сможете "дописать" ключ или обменять значения двух ключей:
name=value
name=$(name)_plus_more_value


Вышеприведённая пара строк вовсе не равна
name=value_plus_more_value

Вернее будет рассматривать описания ключей, как LL-грамматику (за исключение того, что последующие строки переписывают, а не дополняют определения ключей).

При этом действующее значение ключа получается в момент обращения к нему.
Для приведённого мной примера логика такая:
1) name=value - определяется ключ name со значением 'value'
2) name=$(name)_plus_more_value - ключ name переопределяется заного, со значением '$(name)_plus_more_value'

3) при чтении значения name позже ( в properties, LUA-скриптах, ... ) программа проверяет, есть ли зарегистрированный ключ name?
3.1) Ага, нашли name, получили его значение '$(name)_plus_more_value'
3.2) '$(name)_plus_more_value' парсится на предмет подстановок - снова ищется ключ name
3.3) Ага, нашли name, получили его значение и подставили: '$(name)_plus_more_value_plus_more_value', снова парсим на предмет подстановок...
3.4) и так далее в бесконечном цикле, пока не достигнем максимума длины значения ключа.
Цитата


Добавить комментарий:
Имя:
E-mail:
        BBCodes




Интересные статьи / Тематические материалы © 2004 - 2017 - Хранение данных