使用json转换cobal语句

问题描述 投票:0回答:1

我必须将 cobal 语句转换为 json

import re
import json

def extract_cursor(cobol_statement):
    pattern = r"MODIFY MAP (?: CURSOR|TEMP|FOR|PERM|CURSOR)?(?:CURSOR)?(?: AT)?(?: FIELD)?(?: DFLD)?\s+([\w-]+)(?!\()"
    action_regex = re.compile(pattern, re.IGNORECASE)
    action_match = action_regex.search(cobol_statement)
    if action_match:
        cursor_value = action_match.group(1)
        if cursor_value.upper() != "FIELD" and cursor_value.upper() != "DFLD":
            result = {
                "cursor": cursor_value,
                "for": None,
                "attributes": None
            }
            return result
    return None

# Example COBOL statements
cobol_statement1 = "MODIFY MAP TEMP CURSOR AT NBS-DS-01"
cobol_statement2 = "MODIFY MAP CURSOR NBS-DS-01"
cobol_statement3 = "MODIFY MAP FOR FIELD NBS-DS-01"
cobol_statement4 = "MODIFY MAP PERM NBS-DS-01"

# Extract cursor from each COBOL statement
cursor_info1 = extract_cursor(cobol_statement1)
cursor_info2 = extract_cursor(cobol_statement2)
cursor_info3 = extract_cursor(cobol_statement3)
cursor_info4 = extract_cursor(cobol_statement4)

# Convert results to JSON format
json_result1 = json.dumps(cursor_info1, indent=4)
json_result2 = json.dumps(cursor_info2, indent=4)
json_result3 = json.dumps(cursor_info3, indent=4)
json_result4 = json.dumps(cursor_info4, indent=4)

print(json_result1)
print(json_result2)
print(json_result3)
print(json_result4)


我的第三条语句有错误的输出,请有人帮助我,我需要这样的输出 { "光标": "NBS-DS-01", “对于”:空, “属性”:空 }

python json list cobalt
1个回答
0
投票

您的正则表达式似乎处理 FOR 后面跟着 FIELD 的情况。这里不需要负向前瞻。

pattern = r"MODIFY MAP (?:TEMP|PERM)?\s*(?:CURSOR)?\s*(?:AT)?\s*(?:FIELD)?\s*(?:DFLD)?\s+([\w-]+)"
© www.soinside.com 2019 - 2024. All rights reserved.