|
|
|
|
|
""" |
|
|
Script per processare file raw.in e raw.out, separando descrizione e codice. |
|
|
Genera tre file: description.txt, input.py e output.py |
|
|
""" |
|
|
import os |
|
|
import sys |
|
|
import argparse |
|
|
import re |
|
|
|
|
|
def clear_text(text): |
|
|
""" |
|
|
Pulisce il testo dalle sequenze di escape preservando la formattazione originale. |
|
|
""" |
|
|
|
|
|
temp_newline = "TEMP_NEWLINE_PLACEHOLDER" |
|
|
temp_tab = "TEMP_TAB_PLACEHOLDER" |
|
|
|
|
|
|
|
|
text = text.replace("\\n", temp_newline) |
|
|
text = text.replace("\\t", temp_tab) |
|
|
|
|
|
|
|
|
text = text.replace("\\", "") |
|
|
|
|
|
|
|
|
text = text.replace(temp_newline, "\n") |
|
|
text = text.replace(temp_tab, "\t") |
|
|
|
|
|
|
|
|
text = text.rstrip('%') |
|
|
|
|
|
|
|
|
text = re.sub(r'\*(.*?)\*', r'\1', text) |
|
|
|
|
|
return text |
|
|
|
|
|
def process_input_file(file_path): |
|
|
""" |
|
|
Processa il file di input contenente descrizione e codice. |
|
|
Restituisce una tupla (descrizione, codice). |
|
|
""" |
|
|
try: |
|
|
with open(file_path, 'r', encoding='utf-8') as file: |
|
|
content = file.read() |
|
|
|
|
|
|
|
|
parts = content.split("_BREAK_", 1) |
|
|
|
|
|
if len(parts) == 2: |
|
|
description = parts[0].strip() |
|
|
code = parts[1].strip() |
|
|
|
|
|
|
|
|
cleaned_code = clear_text(code) |
|
|
|
|
|
return (description, cleaned_code) |
|
|
else: |
|
|
|
|
|
print("Avviso: Nessun separatore _BREAK_ trovato. Considerando tutto il file come codice.") |
|
|
return ("", clear_text(content)) |
|
|
|
|
|
except Exception as e: |
|
|
print(f"Errore nella lettura o elaborazione del file di input {file_path}: {e}") |
|
|
return (None, None) |
|
|
|
|
|
def process_output_file(file_path): |
|
|
""" |
|
|
Processa il file di output contenente solo codice. |
|
|
Restituisce il codice pulito. |
|
|
""" |
|
|
try: |
|
|
with open(file_path, 'r', encoding='utf-8') as file: |
|
|
content = file.read() |
|
|
|
|
|
|
|
|
cleaned_code = clear_text(content) |
|
|
|
|
|
return cleaned_code |
|
|
|
|
|
except Exception as e: |
|
|
print(f"Errore nella lettura o elaborazione del file di output {file_path}: {e}") |
|
|
return None |
|
|
|
|
|
def save_files(description, input_code, output_code, output_folder): |
|
|
""" |
|
|
Salva i tre file di output nella cartella specificata. |
|
|
""" |
|
|
os.makedirs(output_folder, exist_ok=True) |
|
|
|
|
|
|
|
|
description_path = os.path.join(output_folder, "description.txt") |
|
|
with open(description_path, 'w', encoding='utf-8') as f: |
|
|
f.write(description) |
|
|
|
|
|
|
|
|
input_path = os.path.join(output_folder, "input.py") |
|
|
with open(input_path, 'w', encoding='utf-8') as f: |
|
|
f.write(input_code) |
|
|
|
|
|
|
|
|
output_path = os.path.join(output_folder, "output.py") |
|
|
with open(output_path, 'w', encoding='utf-8') as f: |
|
|
f.write(output_code) |
|
|
|
|
|
return description_path, input_path, output_path |
|
|
|
|
|
def main(): |
|
|
|
|
|
parser = argparse.ArgumentParser(description="Processa file raw.in e raw.out per generare descrizione, input e output") |
|
|
parser.add_argument("raw_in", help="Percorso al file raw.in con descrizione e codice") |
|
|
parser.add_argument("raw_out", help="Percorso al file raw.out con solo codice") |
|
|
parser.add_argument("output_folder", help="Cartella dove salvare i file generati") |
|
|
parser.add_argument("--debug", action="store_true", help="Mostra dettagli di debug durante l'elaborazione") |
|
|
|
|
|
args = parser.parse_args() |
|
|
|
|
|
|
|
|
description, input_code = process_input_file(args.raw_in) |
|
|
if description is None or input_code is None: |
|
|
print(f"Impossibile processare il file di input: {args.raw_in}") |
|
|
return 1 |
|
|
|
|
|
|
|
|
output_code = process_output_file(args.raw_out) |
|
|
if output_code is None: |
|
|
print(f"Impossibile processare il file di output: {args.raw_out}") |
|
|
return 1 |
|
|
|
|
|
|
|
|
if args.debug: |
|
|
print("=== DESCRIZIONE ===") |
|
|
print(description) |
|
|
print("\n=== CODICE INPUT ===") |
|
|
print(input_code) |
|
|
print("\n=== CODICE OUTPUT ===") |
|
|
print(output_code) |
|
|
|
|
|
|
|
|
try: |
|
|
desc_path, in_path, out_path = save_files(description, input_code, output_code, args.output_folder) |
|
|
print(f"File generati con successo:") |
|
|
print(f" - Descrizione: {desc_path}") |
|
|
print(f" - Input: {in_path}") |
|
|
print(f" - Output: {out_path}") |
|
|
return 0 |
|
|
except Exception as e: |
|
|
print(f"Errore nel salvare i file: {e}") |
|
|
return 1 |
|
|
|
|
|
if __name__ == "__main__": |
|
|
sys.exit(main()) |
|
|
|