parser

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

 

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

Кое что

AleXp 06.11.2005 12:07

Что-то сделал:
@CLASS
ini
#end def CLASS ini





@create[name;path][_string;_now;_date]
###################################################################################################
^if(-f "${path}/${name}.ini"){
#	$self._file[^file::load[text;${path}/${name}.ini]]
	$_file[^file::load[text;${path}/${name}.ini]]
	$result[$ini:CLASS]
}{
	$_now[^date::now[]]
	$_date[^_now.sql-string[]]
	$_string[# ${name}.ini. Created $_date^#0A^[Default^]^#0A]
	^try{
		^_string.save[${path}/${name}.ini]
#		$self._file[^file::load[text;${path}/${name}.ini]]
		$_file[^file::load[text;${path}/${name}.ini]]
		$result[$ini:CLASS]
	}{
		$exception.handled(1)
		$result[]
	}
}
#end @create[]





@get[param;section][_str;_tab;i;_begin;_end]
###################################################################################################
$result[]
^if(!def $section){$section[Default]}
$_str[$_file.text]
$_str[^_str.match[[ \t]*(#|//|\\\\).*\n][gm]{^#0a}]
$_str[^_str.match[[ \t]+][gm]{ }]
$_str[^_str.match[[ \t]+^$][gm]{}]
$_str[^_str.match[^^[ \t]+][gm]{}]
$_str[^_str.match[^^\n][gm]{}]
$_str[^_str.match[ ?= ?][gm]{^#09}]
^_str.save[tmp.str]
$_tab[^table::load[nameless][tmp.str]]
^file:delete[tmp.str]
^if(^_tab.locate[0;^#5b${section}^#5d]){
	$_begin(^_tab.offset[])
	^if(^_tab.locate(^_tab.0.match[^^\x5b][m])[$.offset($_begin+1)]){$_end(^_tab.offset[]-2)}{$_end($_tab-2)}
	^_tab.offset[set]($_begin)
	^for[i]($_begin;$_end){
		^_tab.offset[cur](1)
		^if($_tab.0 eq "$param"){$result[$_tab.1]}
	}
}
#end @get[]
Парсит файлы вида:
# c.ini. Created 2005-11-05 19:27:23
    #  dfklg dfg;sdgn;d
[Default]   	# основная секция
param = 6

\\ //d gh dfgh fhdfghdfghdfghfh
     	\\ gfh fgh fgh fh sfhs
par88 = deffgh gfhdfgh dfh


par2	 =	888 	// f		   	hkgf


[sec1]
	parm5 = 99
param4 = 		Параметр искомый


s dfgsd = 7	     	  
[sec2]
egfeg = 77
dfgd = jj
par88 = uuu
dfgsdg 	=	 hjig kk 	
dfg = 88
[sec3]
[sec4]
sdvfsdn = 77345.nml
dfg dfg= erg egr
	sfgadsfg = e rg qe
  sdfgefgf = aegagsd
asgsg=asgsdfgad