feat: replace 2 m placeholder with station pattern table from the workbook (Task 5)
Source: RAG 지보패턴현황_20260918.xlsx, sheet 참고_지보패턴현황, 당진방향 table (4+740..5+500, 42 contiguous rows). Lining pattern (M column) per station now drives the lining colour and the viewer readout. Daesan table kept as reference only (WL-4 there, not applied). Drawing patterns E-1, E-2, RP-2, WL-3 are in neither table and stay [미확정]. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01A5Cun3RHQKna9qxE6ybZ4A
This commit is contained in:
1 parent
94a7f8226f
commit
f65c8ebabe
9 files changed
+311
-1736
No files matched your search
@@ -0,0 +1,48 @@
|
||||
#!/usr/bin/env python3
|
||||
"""Extract the 당진방향 station pattern table from 참고_지보패턴현황 (read-only).
|
||||
Rows 55..96 of the sheet: C=start STA, G=end STA, J=length, M=lining pattern
|
||||
(지보패턴), O=실시설계 excavation class (blank = continues the row above),
|
||||
Q=굴착공법, T=비고. Also extracts the 대산방향 table (rows 13..49) for reference.
|
||||
Usage: extract_pattern_table.py <xlsx> <out_dir>"""
|
||||
import csv, os, sys
|
||||
import openpyxl
|
||||
|
||||
SRC, OUT = sys.argv[1], sys.argv[2]
|
||||
wb = openpyxl.load_workbook(SRC, read_only=True, data_only=True)
|
||||
ws = wb["참고_지보패턴현황"]
|
||||
rows = {r: row for r, row in enumerate(ws.iter_rows(min_row=1, max_row=114, max_col=33, values_only=True), start=1)}
|
||||
|
||||
|
||||
def table(r0, r1, tag):
|
||||
out, last_o = [], None
|
||||
for r in range(r0, r1 + 1):
|
||||
row = rows[r]
|
||||
try:
|
||||
a, b = float(row[2]), float(row[6])
|
||||
except (TypeError, ValueError):
|
||||
continue
|
||||
m = (row[12] or "").strip() if isinstance(row[12], str) else row[12]
|
||||
o_raw = row[14]
|
||||
o = o_raw if o_raw not in (None, "") else last_o
|
||||
last_o = o
|
||||
remark = (row[19] or "") if isinstance(row[19], str) else ""
|
||||
out.append({"direction": tag, "source_row": r, "sta_from": a, "sta_to": b,
|
||||
"length_m": row[9], "lining_pattern": m or ("개착부" if "개착" in remark else ""),
|
||||
"excavation": o or "", "excavation_inherited": o_raw in (None, ""),
|
||||
"method": (row[16] or "") if isinstance(row[16], str) else "",
|
||||
"remark": remark})
|
||||
return out
|
||||
|
||||
|
||||
south = table(55, 96, "당진")
|
||||
north = table(13, 49, "대산")
|
||||
os.makedirs(OUT, exist_ok=True)
|
||||
cols = list(south[0].keys())
|
||||
for name, data in [("pattern_stations_dangjin.csv", south), ("pattern_stations_daesan_ref.csv", north)]:
|
||||
with open(os.path.join(OUT, name), "w", encoding="utf-8", newline="") as fh:
|
||||
w = csv.DictWriter(fh, fieldnames=cols)
|
||||
w.writeheader()
|
||||
w.writerows(data)
|
||||
print("dangjin rows", len(south), "range", south[0]["sta_from"], "->", south[-1]["sta_to"])
|
||||
print("daesan rows", len(north), "range", north[0]["sta_from"], "->", north[-1]["sta_to"])
|
||||
print("blank lining pattern rows (dangjin):", [(d["source_row"], d["remark"]) for d in south if not d["lining_pattern"]])
|
||||
Reference in new issue
Block a user