如何将cobal语句转换为Json

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

我必须将 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
2个回答
0
投票

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

pattern = r"MODIFY MAP (?:TEMP|PERM)?\s*(?:CURSOR)?\s*(?:AT)?\s*(?:FIELD)?\s*(?:DFLD)?\s+([\w-]+)"

0
投票

要将 Cobol 语句转换为 JSON,提供的 python 代码使用正则表达式提取 Cobol 语句的特定部分,然后使用此信息构建 JSON 对象。例如,它在 Cobol 语句中查找游标名称并忽略某些关键字。如果它成功找到不是“FIELD”或“DFLD”的游标名称,它会形成一个带有“cursor”以及“for”和“attributes”占位符的简单 JSON。这对于解析 Cobol 中的特定数据模式并将其转换为更通用的可读格式(如 JSON)非常有用。请记住,此脚本专门用于某些 Cobol 模式!

© www.soinside.com 2019 - 2024. All rights reserved.