"""Ersetzt in EINER Zeile einer Datei bestimmte echte Zeichen durch ihre sechs ASCII-Zeichen lange Escape-Folge. Arbeitet mit Codepunkten; im eigenen Quelltext steht keine Escape-Folge, die eine Schicht auswerten koennte. Aufruf: python plan_escape.py [ ...] Beispiel: python plan_escape.py task-107.md 311 2122 0441 Exit 0, wenn mindestens ein Zeichen ersetzt wurde; 2, wenn die Zeile keines der Zeichen traegt. """ import sys from pathlib import Path datei = Path(sys.argv[1]) nummer = int(sys.argv[2]) punkte = [int(p, 16) for p in sys.argv[3:]] text = datei.read_bytes().decode("utf-8") zeilen = text.split("\n") zeile = zeilen[nummer - 1] ersetzt = 0 for punkt in punkte: zeichen = chr(punkt) folge = chr(92) + "u" + format(punkt, "04x") ersetzt += zeile.count(zeichen) zeile = zeile.replace(zeichen, folge) if ersetzt == 0: print(f"BEFUND: Zeile {nummer} traegt keines der Zeichen -- nichts geaendert: {zeilen[nummer - 1][:100]!r}") sys.exit(2) zeilen[nummer - 1] = zeile with open(datei, "w", encoding="utf-8", newline="") as strom: strom.write("\n".join(zeilen)) print(f"{ersetzt} Zeichen ersetzt in Zeile {nummer}: {zeile.strip()[:140]}")