feat: Bereinigung (PURGE) vor Sivas-Export und zusammengefasste CSV je Dispogruppe
EXPORTSIVAS bereinigt die Zeichnung vorab per -PURGE (abschaltbar ueber *csv-bereinigen-vor-export*). export_sivas.py schreibt zusaetzlich je Dispogruppe eine Datei <stamm>_zusammengefasst_dispo<N>.csv. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -2941,8 +2941,27 @@
|
||||
(princ (ssg-text "exp-hoehencheck-fehlt")))))
|
||||
)
|
||||
|
||||
;; Vor dem Sivas-Export die Zeichnung bereinigen (BricsCAD-Befehl BEREINIG /
|
||||
;; PURGE): entfernt unbenutzte Bloecke, Layer, Linientypen usw. samt
|
||||
;; verschachtelter Elemente. Sprachunabhaengig ueber -PURGE mit "_All".
|
||||
;; Schalter *csv-bereinigen-vor-export* (Standard an; Tests schalten ab, da
|
||||
;; die Zeichnung veraendert wird).
|
||||
(if (null *csv-bereinigen-vor-export*) (setq *csv-bereinigen-vor-export* 'an))
|
||||
|
||||
(defun csv:bereinigen ()
|
||||
(if (and (eq *csv-bereinigen-vor-export* 'an) (ssg-gui-p))
|
||||
(progn
|
||||
(princ (ssg-text "exp-bereinigen"))
|
||||
;; Zweimal, weil das Entfernen eines Blocks dessen Layer/Linientypen
|
||||
;; erst frei macht (zusaetzlich zur Nested-Option)
|
||||
(repeat 2
|
||||
(vl-catch-all-apply
|
||||
'(lambda () (command "_.-PURGE" "_All" "*" "_No"))))
|
||||
(princ))))
|
||||
|
||||
;; --- EXPORTSIVAS: Sivas-spezifischer CSV-Export mit Summierungszeilen ---
|
||||
(defun c:EXPORTSIVAS ()
|
||||
(csv:bereinigen)
|
||||
(csv:hoehencheck-anbieten)
|
||||
(csv:run-export "EXPORTSIVAS"
|
||||
(export:filename "sivas_script")
|
||||
|
||||
@@ -729,6 +729,7 @@
|
||||
"exp-check-ids": "\n[%1] Pruefe und vergebe IDs...",
|
||||
"exp-hoehencheck-frage": "\nVor dem Export den Hoehen-Check (Montagehoehe/Buehnen) ausfuehren?",
|
||||
"exp-hoehencheck-fehlt": "\nHinweis: HOEHEN_CHECK nicht verfuegbar - Export laeuft ohne Hoehen-Check.",
|
||||
"exp-bereinigen": "\nBereinige Zeichnung (PURGE: unbenutzte Bloecke, Layer, Linientypen) ...",
|
||||
"exp-hoehen-aktualisiert": "\nHoehen-Attribute von %1 verschobenen Bloecken aus der Z-Koordinate neu gesetzt.",
|
||||
"exp-sep-proxy-fehler": "\n[EXPORT] WARNUNG: Kopie von '%1' aus Block '%2' fehlgeschlagen (%3) - dieses Element fehlt im Export.",
|
||||
"exp-sep-zuordnung": "\n[%1] verpackte Separator-Kopie(n): ZUORDNUNG aus der ID des Wrapper-Blocks gesetzt.",
|
||||
|
||||
@@ -729,6 +729,7 @@
|
||||
"exp-check-ids": "\n[%1] Checking and assigning IDs...",
|
||||
"exp-hoehencheck-frage": "\nRun the height check (mounting height/platforms) before the export?",
|
||||
"exp-hoehencheck-fehlt": "\nNote: HOEHEN_CHECK not available - export runs without height check.",
|
||||
"exp-bereinigen": "\nPurging drawing (unused blocks, layers, linetypes) ...",
|
||||
"exp-hoehen-aktualisiert": "\nHeight attributes of %1 moved blocks reset from their Z coordinate.",
|
||||
"exp-sep-proxy-fehler": "\n[EXPORT] WARNING: copying '%1' out of block '%2' failed (%3) - this element is missing from the export.",
|
||||
"exp-sep-zuordnung": "\n[%1] packed separator copy/copies: ZUORDNUNG set from the wrapper block ID.",
|
||||
|
||||
@@ -58,6 +58,7 @@ items_zusammenfassen. output.csv selbst bleibt unveraendert.
|
||||
import json
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
|
||||
from export_blockpatterns import (load_patterns, load_export_cfg, cfg_path_from_env,
|
||||
matches_any, csv_quote, safe_float, safe_int)
|
||||
@@ -1184,6 +1185,13 @@ def zusammengefasster_dateiname(output_csv):
|
||||
return f"{stamm}_zusammengefasst{endung}"
|
||||
|
||||
|
||||
def dispogruppen_dateiname(output_csv, dispo):
|
||||
"""z.B. "500651_sivas.csv", "10" -> "500651_sivas_zusammengefasst_dispo10.csv"."""
|
||||
stamm, endung = os.path.splitext(output_csv)
|
||||
sauber = re.sub(r"[^0-9A-Za-z_-]", "_", str(dispo)) or "leer"
|
||||
return f"{stamm}_zusammengefasst_dispo{sauber}{endung}"
|
||||
|
||||
|
||||
def items_zusammenfassen(items):
|
||||
"""Fasst Zeilen zusammen, die sich nur in Nr, Anzahl und IDs
|
||||
unterscheiden: Anzahl wird addiert, die IDs werden (ohne Dubletten, in
|
||||
@@ -1261,6 +1269,18 @@ def main():
|
||||
print(f"[export_sivas] Zusammengefasste CSV geschrieben: {output_csv_zus} "
|
||||
f"({len(items_zus)} Zeilen)")
|
||||
|
||||
# Je Dispogruppe eine eigene zusammengefasste Datei, z.B.
|
||||
# "<stamm>_zusammengefasst_dispo10.csv" (Nr je Datei neu gezaehlt).
|
||||
for dispo in sorted({str(i["dispgruppe"]) for i in items_zus}):
|
||||
teil = [i for i in items_zus if str(i["dispgruppe"]) == dispo]
|
||||
teil = [dict(i, nr=n) for n, i in enumerate(teil, 1)]
|
||||
pfad = dispogruppen_dateiname(output_csv, dispo)
|
||||
with open(pfad, "w", encoding="utf-8") as f:
|
||||
f.write(header + "\n")
|
||||
for item in teil:
|
||||
f.write(format_csv_line(item) + "\n")
|
||||
print(f"[export_sivas] Dispogruppe {dispo}: {pfad} ({len(teil)} Zeilen)")
|
||||
|
||||
# Zweite, lesbare Kopie fuer die manuelle Pruefung (Merkmalnummer +
|
||||
# Bezeichnung aus cfg/Merkmalsstamm_in_Sivas.xlsx) - wird von Sivas
|
||||
# selbst NICHT eingelesen, nur output_csv ist der eigentliche Import.
|
||||
|
||||
Reference in New Issue
Block a user