124 lines
2.8 KiB
Python
124 lines
2.8 KiB
Python
|
|
#导入测量的轨道数据
|
|||
|
|
|
|||
|
|
import re
|
|||
|
|
from PyQt6.QtWidgets import QFileDialog
|
|||
|
|
import color
|
|||
|
|
|
|||
|
|
def get_filename(filename = None):
|
|||
|
|
if not filename:
|
|||
|
|
if hasattr(get_filename, "filename"):
|
|||
|
|
path_hint = os.path.dirname(get_filename.filename)
|
|||
|
|
else:
|
|||
|
|
path_hint = ""
|
|||
|
|
filename, _ = QFileDialog.getOpenFileName(window, "从DAT文件导入数据", path_hint, "DAT数据文件(*.dat *.DAT)")
|
|||
|
|
if not filename:
|
|||
|
|
return
|
|||
|
|
|
|||
|
|
if len(filename) < 4 or filename[-4:].lower() != ".dat":
|
|||
|
|
filename += ".dat"
|
|||
|
|
|
|||
|
|
filename = filename.replace("\\", "\\\\")
|
|||
|
|
filename = filename.replace("\"", "\\\"")
|
|||
|
|
return filename
|
|||
|
|
|
|||
|
|
def load_measure_data(file_name):
|
|||
|
|
with open(file_name, "r") as fobj:
|
|||
|
|
raw = fobj.readlines()
|
|||
|
|
|
|||
|
|
flag = False
|
|||
|
|
r1 = []
|
|||
|
|
|
|||
|
|
for line in raw:
|
|||
|
|
line = line.strip()
|
|||
|
|
match = re.match(r"For\s+M5\|Adr\s+", line)
|
|||
|
|
if match is None:
|
|||
|
|
raise RuntimeError("Unrecognized data: {line}")
|
|||
|
|
m = match.group(0)
|
|||
|
|
pos = len(m)
|
|||
|
|
line = line[pos:]
|
|||
|
|
|
|||
|
|
match = re.match(r"\d+\|([0-9A-Z]+)\s+", line)
|
|||
|
|
if match is None:
|
|||
|
|
raise RuntimeError("Unrecognized data: {line}")
|
|||
|
|
m = match.group(0)
|
|||
|
|
pos = len(m)
|
|||
|
|
line = line[pos:]
|
|||
|
|
|
|||
|
|
match = re.match(r"[0-9a-zA-Z\.\-]+", line)
|
|||
|
|
if match is None:
|
|||
|
|
raise RuntimeError("Unrecognized data: {line}")
|
|||
|
|
label = match.group(0)
|
|||
|
|
pos = len(label)
|
|||
|
|
line = line[pos:]
|
|||
|
|
|
|||
|
|
match = re.match(r"KZ\d*", label)
|
|||
|
|
if not match is None:
|
|||
|
|
label = match.group(0)
|
|||
|
|
pos = len(label)
|
|||
|
|
line = line[pos:]
|
|||
|
|
#print("控制点", label, line)
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
if label == "Intermediate":
|
|||
|
|
flag = True
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
if label == "End":
|
|||
|
|
flag = False
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
if not flag:
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
match = re.match(r"[A-Z]*\d+[\.\-]\d+", label)
|
|||
|
|
if match is None:
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
data = line.split("|")
|
|||
|
|
data = data[3]
|
|||
|
|
match = re.match(r"[0-9a-zA-Z]+\s+(\d+\.\d+)", data)
|
|||
|
|
if match is None:
|
|||
|
|
raise RuntimeError(f"找不到所需数据: {data}")
|
|||
|
|
data = match.group(1)
|
|||
|
|
|
|||
|
|
#print("轨道点", label, data)
|
|||
|
|
r1.append([label, data])
|
|||
|
|
|
|||
|
|
r2 = []
|
|||
|
|
for label, data in r1:
|
|||
|
|
match = re.match(r"([A-Z]*)(\d+)[\.\-](\d+)", label)
|
|||
|
|
l = match.group(1)
|
|||
|
|
d1 = int(match.group(2))
|
|||
|
|
d2 = int(match.group(3))
|
|||
|
|
d3 = float(data)
|
|||
|
|
r2.append([l, d1, d2, d3])
|
|||
|
|
|
|||
|
|
r2.sort(key = lambda x: (x[1], x[2]))
|
|||
|
|
# for line in r2:
|
|||
|
|
# print(f"{line[0]}{line[1]}.{line[2]} {line[3]}")
|
|||
|
|
return r2
|
|||
|
|
|
|||
|
|
filename = get_filename()
|
|||
|
|
if filename:
|
|||
|
|
#轨道数据表
|
|||
|
|
sheet_measure = sheet("measure_data")
|
|||
|
|
|
|||
|
|
data = load_measure_data(filename)
|
|||
|
|
sheet_measure.clear_content()
|
|||
|
|
with sheet_measure:
|
|||
|
|
for line in data:
|
|||
|
|
label = "%s%d.%d" % tuple(line[:3])
|
|||
|
|
row = line[1] - 1
|
|||
|
|
flag = line[2] > 1
|
|||
|
|
if line[2] > 2:
|
|||
|
|
print(f"{color.yellow}警告{color.nc}:编号{label}第2个数字大于2,当作右轨处理")
|
|||
|
|
data = line[3]
|
|||
|
|
if flag:
|
|||
|
|
cell(row, 2).value = label
|
|||
|
|
cell(row, 3).value = data
|
|||
|
|
else:
|
|||
|
|
cell(row, 0).value = label
|
|||
|
|
cell(row, 1).value = data
|
|||
|
|
|
|||
|
|
sheet_measure.fit_content()
|