import argparse import os import csv from tools.util.type import detectType, stringToCType, typeToCType parser = argparse.ArgumentParser(description="Convert CSV to .h defines") parser.add_argument("--csv", required=True, help="Path to CSV file") parser.add_argument("--output", required=True, help="Path to output .h file") parser.add_argument("--variable", required=True, help="Name of generated array variable") parser.add_argument('--index-include-path', required=False, default='', help="Include path for index defines") parser.add_argument('--index-prefix', required=False, default='', help="Prefix for index defines") parser.add_argument('--index-column', required=True, help="Column name for index values") parser.add_argument('--data-column', required=True, help="Column name for data values") args = parser.parse_args() # Start Header outHeader = "#pragma once\n" outHeader += "#include \"dusk.h\"\n" if args.index_include_path: outHeader += f'#include "{args.index_include_path}"\n' outHeader += "\n" # Read CSV file with open(args.csv, newline='') as csvfile: reader = csv.reader(csvfile) headers = next(reader) # Ensure both index and data columns exist. if args.index_column not in headers: raise ValueError(f"Index column '{args.index_column}' not found in CSV headers") if args.data_column not in headers: raise ValueError(f"Data column '{args.data_column}' not found in CSV headers") # Create key-value pairs from CSV rows. index_col_idx = headers.index(args.index_column) data_col_idx = headers.index(args.data_column) keyValuePairs = {} valType = None for row in reader: key = row[index_col_idx] value = row[data_col_idx] # Don't allow duplicate keys. if key in keyValuePairs: raise ValueError(f"Duplicate key '{key}' found in CSV") keyValuePairs[key] = value if valType is None: valType = detectType(value) if valType is None: valType = 'String' # Now begin generating header. cType = typeToCType(valType) outHeader += f"static const {cType} {args.variable}[] = {{\n" for key in keyValuePairs: outHeader += f" [{args.index_prefix}{key}] = " value = keyValuePairs[key] outHeader += stringToCType(value) outHeader += ",\n" outHeader += "};\n\n" # Write to output file with open(args.output, 'w') as outFile: outFile.write(outHeader)