Export CSV: Zeilen nach TeileId sortieren, Elementnummer neu vergeben
Damit stimmen Elementnummer (erste Spalte) und TeileId ueberein, solange kein Element geloescht wurde - geloeschte Elemente hinterlassen Luecken in der TeileId-Folge statt in der Zeilennummerierung. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -84,6 +84,15 @@ EXPORTCSV vorhanden (nicht EXPORTSIVAS) - siehe csv:run-export. Insertpoint/
|
||||
K1-K4 stehen zwar in export_raw.json fuer jeden Export zur Verfuegung (siehe
|
||||
csv:block-to-json), werden aber ebenfalls nur von diesem Skript (EXPORTCSV)
|
||||
als CSV-Spalten ausgegeben.
|
||||
|
||||
Reihenfolge/Elementnummer: die Zeilen werden am Ende aufsteigend nach
|
||||
TeileId sortiert (numerische IDs) und die Elementnummer (erste Spalte)
|
||||
danach neu von 1 an vergeben (siehe teileid_sort_key in process_blocks) -
|
||||
wurde kein Element geloescht, stimmen Elementnummer und TeileId dadurch
|
||||
ueberein, geloeschte Elemente hinterlassen Luecken in der TeileId-Folge.
|
||||
Zeilen ohne numerische TeileId (Omniflo-Sum-Zeile, SEP-/SCN-Fallback-IDs
|
||||
ohne ID-Attribut) behalten stabil ihre bisherige Reihenfolge und stehen
|
||||
danach.
|
||||
"""
|
||||
|
||||
import json
|
||||
@@ -816,6 +825,22 @@ def process_blocks(blocks, lookup, dbg=None):
|
||||
elem_nr = build_kreisel_weiche_items(items, planquadrat_cfg, elem_nr, dbg=dbg)
|
||||
build_strecke_schleus_items(items, planquadrat_cfg, elem_nr, dbg=dbg)
|
||||
|
||||
# Nach dem Sammelheimen aller Zeilen: sortiert nach TeileId ausgeben, damit
|
||||
# Elementnummer (erste Spalte) und TeileId nach Moeglichkeit uebereinstimmen
|
||||
# (siehe format_csv_line/Elementnummer-Neuvergabe unten). Numerische IDs
|
||||
# zuerst aufsteigend; nicht-numerische IDs (z.B. "autogenerated_of_json"
|
||||
# der Omniflo-Sum-Zeile oder SEP-/SCN-Fallback-IDs ohne ID-Attribut)
|
||||
# behalten stabil ihre bisherige Reihenfolge und stehen danach. Wurde kein
|
||||
# Element geloescht, ergibt sich dadurch Elementnummer == TeileId.
|
||||
def teileid_sort_key(indexed_item):
|
||||
index, item = indexed_item
|
||||
tid = str(item.get("teileid", "")).strip()
|
||||
return (0, int(tid)) if tid.isdigit() else (1, index)
|
||||
|
||||
items = [item for _, item in sorted(enumerate(items), key=teileid_sort_key)]
|
||||
for i, item in enumerate(items, start=1):
|
||||
item["nr"] = i
|
||||
|
||||
return items
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user