parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Хелпик

AleXp 04.03.2006 21:53

Глянь класс который чем-то похожим занимается. Можно взять за основу - переделать надо будет @_search_string[]
###################################################################################################
# Класс . Предназначается для работы с файлами вида *.ini
###################################################################################################
@CLASS
iniFile
###################################################################################################
# Поля класса:
#--------------------------------------------------------------------------------------------------
# $pathToFileIni	Путь к файлу *.ini
#==================================================================================================
# Методы класса:
#--------------------------------------------------------------------------------------------------
# create[]		Создает или инициализирует файл.
# get[]			Возвращает значение параметра.
# getall[]		Возвращает значение всех параметров из файла.
# put[]			Задает значение параметра.
# del[]			Удаляет значение параметра.
# list[]		Возвращает список всех параметров.
###################################################################################################





@create[name;path][_string;_now]
###################################################################################################
$pathToFileIni[^path.trim[end;/]/${name}.p]
^if(-f "$pathToFileIni"){
}{
	$_now[^date::now[]]
	$_string[# ${pathToFileIni}. Created ^_now.sql-string[]^#0A]
	^try{
		^_string.save[$pathToFileIni]
	}{
		$exception.handled(true)
	}
}
#end @create[]





@get[param][_tab]
###################################################################################################
$_tab[^_search_string[^_get_string[];$param]]
^if(^_tab.count[] != 0){$result[$_tab.4]}{$result[]}
#end @get[]





@getall[][_str;_tab]
###################################################################################################
$result[]
$_str[^_get_string[]]
$_tab[^_str.match[^^([ \x01]*)(\w+)([ \x01]*=[ \x01]*)([^^\s\x01]+)(.*\n)][mg]]
^if(def $_tab){
	^_tab.menu{
		^process[$caller.self]{^$[$_tab.2][$_tab.4]}
	}
}
#end @getall[]





@put[param;value][_str;_tab]
###################################################################################################
^file:lock[ini.lock]{
	$_str[^_get_string[]]
	$_tab[^_search_string[$_str;$param]]
	^if(^_tab.count[] != 0){
		$_str[^_str.match[${_tab.1}${_tab.2}${_tab.3}${_tab.4}${_tab.5}][]{${_tab.1}${_tab.2}${_tab.3}${value}${_tab.5}}]
	}{
		$_str[${_str}${param} = ${value}^#0A]
	}
	^_put_string[$_str]
}
$result[]
#end @put[]




@del[param][_str;_tab]
###################################################################################################
^file:lock[ini.lock]{
	$_str[^_get_string[]]
	$_tab[^_search_string[$_str;$param]]
	^if(^_tab.count[] != 0){
		$_str[^_str.match[${_tab.1}${_tab.2}${_tab.3}${_tab.4}${_tab.5}][]{}]
		^_put_string[$_str]
	}
}
$result[]
#end @del[]




@list[][_file]
###################################################################################################
$_file[^file::load[text;$pathToFileIni]]
$result[$_file.text]
#end @list[]




@_get_string[][_file]
###################################################################################################
$_file[^file::load[text;$pathToFileIni]]
$result[^_file.text.match[\t][g]{^#01}]
#end @_get_string[]





@_put_string[str]
###################################################################################################
$str[^str.match[\x01][g]{^#09}]
^str.save[$pathToFileIni]
$result[]
#end @_put_string[]





@_search_string[str;param]
###################################################################################################
$result[^str.match[^^([ \x01]*)($param)([ \x01]*=[ \x01]*)(\S+)(.*\n)][m]]
#end @_search_string[]