如何使用C#解析具有键值的* .INI文件作为另一个值的键?
示例:
[PROJECT]
SUBPROJECT={$PROJECT_NAME_{$INI-FILE-DEFAULT-NAME$}$}_subproject
PROJECT_NAME_109={$INI-FILE-DEFAULT-NAME$}
INI-FILE-DEFAULT-NAME=109
说明:
[section]
key= {$value$}
{$value$} = {$value2$}
{$value2$} = text
我无法从键“ value2”中获取文本。 在当前的实现中,我只能从键“值”中获取文本。我想从键“ value2”中获取文本,并通过解析每个键将其放在键“键”中。
预期:
[PROJECT]
SUBPROJECT=109_subproject
PROJECT_NAME_109=109
INI-FILE-DEFAULT-NAME=109
Antlr语法文件:
grammar StatusFile;
/*
* Parser Rules
*/
file: (ini)+ EOF
;
ini : section (option)*
;
section : STRING eol+
;
option : key '=' value* eol+ # assign
;
eol : WS
;
key : STRING
;
value : OPEN_ACOLADE value* CLOSE_ACOLADE #Token
| STRING #String
;
WS : ( '\r\n' )+;
OPEN_ACOLADE : '{$' ;
CLOSE_ACOLADE : '$}' ;
STRING : ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' | '/' | '\\' | ':' | '*'
| '.' | ',' | ' ' | '-' | '<' | '>' | '!' | '+' | '"' | '#' | '(' | ')'
| '?' | '%' | '&' | '[' | ']' | '|' | ';' | '\'' | '~' | '^' | '`' )+ ;
答案 0 :(得分:0)
我有一个具有此功能的INI library,我称其为值绑定,但是它不是{$NAME$}
而是使用@{NAME}
占位符。
例如,对于以下INI内容:
[PROJECT]
PROJECTNAME109=@{INIFILEDEFAULTNAME}
INIFILEDEFAULTNAME=109
以及以下C#代码:
var ini = new IniFile();
ini.Load("sample.ini");
ini.ValueBinding.Bind();
foreach (var sec in ini.Sections)
foreach (var key in sec.Keys)
Console.WriteLine("{0}={1}", key.Name, key.Value);
结果是:
PROJECTNAME109=109
INIFILEDEFAULTNAME=109
但是,当前它不允许使用带有'-'字符(只能是字母)的占位符名称,并且目前还不能处理嵌套的占位符(例如@{NAME@{NAME}}
)。
但是,尽管如此,让我知道您是否有兴趣将其用作解决方案,我也会对此提供支持。