Fuenfte harte Nummer gefunden: eine Tabellenzelle - und die Pruefung dagegen

31_Unsicherheit.md trug in der Uebersicht "Die drei Ansaetze im Ueberblick"
noch die Zeile

    | Kapitel | 9.2 | 9.3 | 9.4 |

Die Abschnitte heissen in Version 04 aber 12.4 bis 12.6 - stehengebliebene
Version-03-Nummern, im PDF abgedruckt. Damit ist die Regel "keine
abgeleiteten Zahlen im Quelltext" zum fuenften Mal verletzt gefunden worden.

--check lief daran vorbei, weil der bestehende Ausdruck das Wort unmittelbar
vor der Zahl verlangt ((Kapitel|Abschnitt|...)\s+\d+). Hier steht "Kapitel"
als Zeilenkopf, durch " | " von der Zahl getrennt - \s+ matcht keinen
senkrechten Strich.

pruefe_dateien() bekommt daher eine zweite Pruefung: eine Tabellenzelle, die
nur aus einer Nummer der Form N.N besteht. Sie ueberspringt Codezaeune, weil
abgedruckte Programmausgaben ihre Spalten ebenfalls mit "|" setzen
(40_Finanzdaten.md Zeilen 381-385 waeren sonst fuenf Fehlalarme).

Gegengetestet: die wieder eingebaute Zeile wird mit allen drei Zellen
einzeln gemeldet, nach dem Rueckbau ist der Lauf sauber.

Die Zeile heisst jetzt "Nachzulesen in" und traegt drei {ref:sec:...};
Querverweise 703 -> 706. Referenzwerte in PROGRESS.md auf die gemessenen
Werte nachgezogen (27.015 Zeilen, 1512 KB) - sie lagen zwei Zeilen zurueck.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
dschlueter 2026-09-08 01:23:33 +02:00
commit 62952ba066
3 changed files with 60 additions and 4 deletions

View file

@ -267,7 +267,7 @@ Erwartungswert der Kosten ist größer als die Kosten des Erwartungswerts.
| Typische Frage | „Wie riskant ist dieser Plan?“ | „Was ist im Mittel am besten?“ | „Was hält auch im schlimmsten Fall?“ |
| Stärke | beliebige Kennzahlen, sehr flexibel | nutzt Wahrscheinlichkeiten voll aus | keine Verteilungsannahme nötig |
| Schwäche | keine Optimierung | Wahrscheinlichkeiten müssen stimmen | oft übervorsichtig, kostet Ertrag |
| Kapitel | 9.2 | 9.3 | 9.4 |
| Nachzulesen in | {ref:sec:unsicherheit-monte-carlo-simulation} | {ref:sec:unsicherheit-zweistufige-stochastische-programmierung} | {ref:sec:unsicherheit-robuste-optimierung-gegen-den-worst-case} |
---

View file

@ -227,6 +227,32 @@ def pruefe_dateien() -> list[str]:
f"{{ref:...}}-Verweis oder ein Name.")
fehlend.append(name)
# Dieselbe Zahl, aber in einer Tabellenzelle - dort steht das Wort
# 'Kapitel' als Zeilenkopf und ist durch ' | ' von der Nummer getrennt, an
# dem \s+ oben vorbeilaeuft. Genau so ueberlebte '| Kapitel | 9.2 | 9.3 |
# 9.4 |' in 31_Unsicherheit.md den Umbau auf Version 04, wo dieselben
# Abschnitte 12.4 bis 12.6 heissen.
#
# Codezaeune werden uebersprungen: Abgedruckte Programmausgaben setzen
# Spalten ebenfalls mit '|' und enthalten legitime Zahlen wie '| 12.6 |'.
zelle_re = re.compile(r"^\d{1,2}\.\d{1,2}([ ,]+\d{1,2}\.\d{1,2})*$")
for name in DATEIEN:
with open(os.path.join(HIER, name), encoding="utf-8") as f:
inhalt = f.read()
im_codeblock = False
for nr, zeile in enumerate(inhalt.split("\n"), start=1):
if zeile.lstrip().startswith("```"):
im_codeblock = not im_codeblock
continue
if im_codeblock or not zeile.lstrip().startswith("|"):
continue
for zelle in zeile.strip().strip("|").split("|"):
if zelle_re.match(zelle.strip()):
print(f"FEHLER: {name}:{nr} hat die Tabellenzelle "
f"'{zelle.strip()}' - eine nackte Abschnittsnummer. "
f"Dorthin gehoert ein {{ref:...}}-Verweis.")
fehlend.append(name)
return fehlend