我有一个应用程序可以根据一些设定的规则验证 CSV 文件。应用程序检查 CVS 中的某些“列/字段”是否被标记为必填,其他的则检查其必填状态是否基于另一个字段。例如,第 2 列对第 5 列进行条件检查,如果第 5 列有值,则第 2 列也必须有值。
我已经使用 VB 和 Python 实现了这一点。问题是这个逻辑在应用程序中是硬编码的。我想要的是将此规则移动到一个 XML 中,应用程序将在其中读取该 XML 并处理该文件。如果处理规则发生变化——而且它们经常变化——那么应用程序保持不变,只有 XML 发生变化。
以下是python中的两个示例规则:
样品一
current_column_data = 5 #data from the current position in the CSV
if validate_data_type(current_column_data, expected_data_type) == False:
return error_message
index_to_check_against = 10 #Column against which there is a "logical" test
text_to_check = get_text(index_to_check_against)
if validate_data_type(text_to_check, expected_data_type) == False:
return error_message
if current_column_data > 10: #This test could be checking String Vs String so have to keep in mind that to avoid errors since current column data could be a string value
if text_to_check <= 0:
return "Text to check should be greater than 0 if current column data is greater than 10 "
样品二
current_column_data = "Self Employed" #data from the current position in the CSV
if validate_data_type(current_column_data, expected_data_type) == False:
return error_message
index_to_check_against = 10 #Column against which there is a "logical" test
text_to_check = get_text(index_to_check_against)
if validate_data_type(text_to_check, expected_data_type) == False:
return error_message
if text_to_check == "A": #Here we expect if A is provided in the index to check, then current column should have a value hence we raise an error message
if len(current_column_data) = 0:
return "Current column is mandatory given that "A" is provided in Column_to_check""
注意:对于 CSV 中的每一列,我们已经知道预期的数据类型,该字段的预期长度,是强制的、可选的还是条件的,如果它是条件的,则条件基于的另一列
现在我只需要一些关于如何在 XML 中执行此操作的指导,并且应用程序读取 XML 并知道如何处理每一列。
有人在其他地方建议了以下示例,但我仍然无法理解这个概念。:
<check left="" right="9" operation="GTE" value="3" error_message="logical failure for something" />
#Meaning: Column 9 should be "GTE" i.e. Greater than or equal two value 3"
有没有不同的方法来实现这种逻辑,甚至是改进我在这里所拥有的东西?
欢迎提出建议和指点