3

いくつかの設定されたルールに対して CSV ファイルを検証するアプリケーションがあります。アプリケーションは、CVS の一部の「列/フィールド」が必須としてマークされているかどうかをチェックし、その他の必須ステータスが別のフィールドに基づいているかどうかをチェックします。たとえば、列 2 には列 5 に対する条件付きチェックがあり、列 5 に値がある場合、列 2 にも値が必要です。

私はすでにVBとPythonを使用してこれを実装しています。問題は、このロジックがアプリケーションにハードコーディングされていることです。私が望むのは、このルールを、アプリケーションがその XML を読み取ってファイルを処理する XML に移動することです。処理のルールが変更された場合 (ルールは頻繁に変更されます)、アプリケーションは同じままで、XML のみが変更されます。

Python の 2 つのサンプル ルールを次に示します。

サンプル1

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 "

サンプル 2

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"

この種のロジックを達成するための別の方法や、ここにあるものを改善する方法はありますか?

提案とポインタを歓迎します

4

2 に答える 2