from pathlib import Path
def schema_convert(base_dir: str):
base_dir = Path(base_dir).absolute()
schema_file = base_dir / "schema.ini"
with open(schema_file, "r", encoding="latin-1") as frh:
schema = frh.read()
# schema = schema.replace('\n\n', '\n').replace('\n\n', '\n')
tables = dict([convert_table_info(t) for t in schema[1:].split("\n[")])
tables_with_columns = {}
for table, details in tables.items():
table_file = base_dir / table
if "schema.ini" in table or not table_file.exists():
continue
col_names = [c.split(" ")[0] for c in details["columns"].values()]
tables_with_columns[table] = col_names
create_format_xml_files(base_dir, tables_with_columns)
def convert_table_info(table_info):
info = table_info.split("]\n")
if len(info) < 2:
return ("", "")
details = {}
details["columns"] = {}
for key, value in [row.split("=") for row in info[1].split("\n") if "=" in row]:
if key.lower() != "colnameheader" and key.lower()[:3] == "col":
details["columns"][key[3:]] = value
return (info[0], details)
def create_format_xml_files(base_dir, tables_with_columns: dict[str, list[str]]):
for table, columns in tables_with_columns.items():
format_file = base_dir / (table + ".xml")
record = []
row = []
for i, col_name in enumerate(columns, 1):
record.append(
f' '
)
row.append(f' ')
record[-1] = record[-1].replace(";", "\\r\\n")
with open(format_file, "w") as fwh:
fwh.write(
'\n\n \n')
fwh.write("\n".join(record))
fwh.write("\n \n \n")
fwh.write("\n".join(row))
fwh.write("\n
\n")
if __name__ == "__main__":
schema_convert("C:\\GlobalCube_LOCOSOFT\\GCStruct_SKR51\\Kontenrahmen")