e.g。配置文件可以有
CFLAGS = "xyz"
CXXFLAGS = "xyz"
OR
CXXFLAGS = "xyz"
CFLAGS = "xyz"
我能想到的最好的实现方法是将参数拆分并将左侧送入开关
for line in file
x = line.split("=")
switch(x[0])
case CFLAGS
do cflags
case CXXFLAGS
do cxxflags
但是那些拥有比我更多经验的人怎么做呢?我知道可能是一些开源程序谁这样做但我甚至不知道在哪里查看他们的来源。 我主要在python和C中编程,所以两者中的实现/伪代码/ whattolookup都是首选,尽管其他语言也可以。
提前致谢。
P.S。除非不可避免,否则尽量避免在答案中说任何形式的re,正则表达式,正则表达式,正则表达式或其任何衍生物:P。
答案 0 :(得分:4)
在Python中,只需使用ConfigParser
模块来解析.ini
- 就像配置文件一样。
自己重新实现这一点,我发现将配置数据视为一种字典很方便。这自然转换为Python的dicts,所以如果我将行拆分为<key> = <value>
,我就继续更新:
confdict[key] = value
使用这种方案,配置文件中的键的顺序无关紧要,就像它在字典本身中无关紧要一样 - 只要你能查找键的值,你就会高兴。
如果你看一下ConfigParser
的内幕(相关的方法是_read
),你会发现这正是它的作用。选项保存在字典中(每个部分一个,因为.ini
配置文件具有一个级别的层次结构)。使用正则表达式从文件中解析行,并如上所述将key, value
对添加到字典中。
这是Python。在C中,我想有很多库用于执行此操作,但实现自己的库将遵循完全相同的算法。您将为字典使用某种关联数组数据结构(哈希表,树或其他任何内容,并不重要)并执行相同的解析和放大。分配
答案 1 :(得分:0)
正如Eli Bendersky所说,在Python中,您应该只使用提供的ConfigParser。
如果你坚持自己这样做,他建议将配置存储为字典的方法。另一种方法是将选项映射到处理值并使用它们执行某些操作的函数:
# Map the options to functions to handle them.
handlers = {
'CFLAGS': some_function,
'CXXFLAGS': other_function,
}
# Loop through each option.
for line in configuration:
# Get the option and value.
option, value = line.split('=')
option = option.strip().upper()
value = value.strip()
# Try to find a handler and process the option.
handler = handlers.get(option)
if handler:
handler(option, value)
else:
raise Exception('Unknown option.')
显然,处理程序函数必须能够接受您传递的option
和value
参数。