对于我试图设计的程序,我正在检查配置文件中是否存在某些条件。例如,该行中包含 ThisExists 行,或文件中存在 ThisIsFirst ,后面的文件后面是 ThisAlsoExists
我寻找一种可能在这种情况下使用的有效方法,但找不到任何方法。
我目前的想法基本上是每次我想检查条件时多次迭代文件。所以我会有功能:
def checkA(文件)
def checkB(文件)
。 。
对我而言,这似乎效率低下,因为我必须针对我想要检查的每个条件进行迭代。
最初我以为我可以迭代一次,检查每一行我想要验证的每个条件。但我不认为我能做到这一点,因为多行的条件一次需要有关多行的信息。
我概述了实现这一目标的唯一方法,还是有更有效的方法?
我想在下面提供一个例子。
def main():
file = open(filename)
result1 = checkA(file)
result2 = checkB(file)
"""This is a single line check function"""
def checkA(file)
conditionExists = False
for line in file:
if(line == "SomeCondition"):
conditionExists = True
return conditionExists
"""This is a multi line check function"""
def checkB(file)
conditionExists = False
conditionStarted = False
for line in file:
if(line == "Start"):
conditionStarted = True
elif(line == "End" and conditionStarted):
conditionExists = True
return conditionExists
答案 0 :(得分:1)
从软件工程的角度来看,您当前的方法具有一些很好的优势。这些函数的逻辑完全相互分离,可以单独调试和测试。每个单独功能的复杂性很低。这种方法允许您轻松地合并不具有并行结构的各种检查。
答案 1 :(得分:0)
如果可用的库(configparser等)不够,我可能会使用正则表达式。
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
HashMap<String, String> song = new HashMap<String, String>();
exe= exeList.get(position);
title=exe.get(Mainactivity.E_TITLE);
text=exe.get(Mainactivity.E_TEXT);
img=exe.get(Mainactivity.E_IMG);
Intent i1= new Intent(Mainactivity.this,New_ListActivity.class);
i1.putExtra("one",title);
i1.putExtra("two",text);
i1.putExtra("three", img);
startActivity(i1);
}
}
这不是最友好的用户方法 - 特别是如果匹配条件很复杂 - 但我认为学习正则表达式的回报非常好。
xkcd告诉我们正则表达式可以是super power和problem。