时间:2022-09-30 05:01:27
摘要:沉降监测是一项精密的工程测量,对可能发生危险的先兆,判断工程的安全性,防止工程破坏事故的发生起到至关重要的作用。不同的厂家,各种不同的仪器,数据格式千差万别,建设单位以及建设监理、监督单位,要求提交的数据格式也有不同的规定。为了提高工作效率,满足不同单位的要求,自做一沉降监测数据处理程序,跟同行共同探讨。
关键词:ADO;数据格式;SPLIT函数
中图分类号:D922.3 文献标识码: A
1 引言
沉降监测中,对一般性的高层建(构)筑物,采用二等水准测量的观测方法就能满足要求,仪器多采用精密的电子水准仪,本文以天宝DINI03为例,全面阐述一下其数据的导入和处理过程。
2 数据导入的设计
本程序是利用VB语言读取电子水准仪的输出文件,然后利用Microsoft ActivX Data Object 2.6 Library ADO对象库的引用,把数据导入到access数据库中。例如,天宝DINI03电子水准仪输出的数据如1-1图,其第一行是文件名,第二行是开始观测行,因为是第一站(奇数站)所以用后、前、前、后方式观测,第三行是水准起点,第四行到第七行是前、后视高,前、后视距,第八行是第一站高程,第十九行到三十四行是无用的数据(铟钢尺没有扶正等原因造成的)第四十一、四十二行是间视点,每行分六个字段。因而首先用VB的函数SPLIT :S=SPLIT((textline1, "|"),把每行分成六个数组进行处理,然后用INSTR以及MID函数:InStr(1, s(3), QSHiSHiGaoZIDuan),作为条件,剔除无用的数据,把视距,视高等有用的数据导进access数据库,以备下一步进行数据处理。数据导入的部分代码如下:
adodblianjie1
rs1.Source = "select * from 水准表 "
rs1.ActiveConnection = conn1
rs1.Open
Do While Not EOF(1)
'For i = 1 To 45
Line Input #1, textline1
s = Split(textline1, "|")
If InStr(11, s(2), "#") Or InStr(11, s(2), WeiJianMing) Or InStr(1, s(2), KaiSHiHang) Or InStr(1, s(2), CHongFuCeZHan) Or InStr(1, s(2), KaiSHiJianSHiDian) Or InStr(1, s(2), JieSHUJianSHiDian) Or InStr(1, s(2), JieSHuHang) Or InStr(1, s(3), SHiJuCHa) Or InStr(1, s(3), QianSHiJuHe) Then
Else
rs1.AddNew
QHdianMing = Trim(Mid(s(2), 4, 15))
rs1.Fields("测量时间") = Calendar1.Value
If InStr(1, s(3), QSHiSHiGaoZIDuan) Then
ChangDu = Len(s(3))
QianSHiSHiGao = Val(Trim(Mid(s(3), 3, ChangDu - 5)))
SJChangDu = Len(s(4))
QianSHiJu = Val(Trim(Mid(s(4), 3, SJChangDu - 5)))
If Rf Then
rs1.Fields("前视视高1") = QianSHiSHiGao
rs1.Fields("前视视距1") = QianSHiJu
rs1.Fields("测站点") = "前" & QHdianMing
Else
rs1.Fields("前视视高2") = QianSHiSHiGao
rs1.Fields("前视视距2") = QianSHiJu
rs1.Fields("测站点") = "前" & QHdianMing
End If
Rf = Not Rf
End If
If InStr(1, s(3), HSHiSHiGaoZiDuan) Then
ChangDu = Len(s(3))
HouSHiSHiGao = Val(Trim(Mid(s(3), 3, ChangDu - 5)))
SJChangDu = Len(s(4))
HouSHiJu = Val(Trim(Mid(s(4), 3, SJChangDu - 5)))
If Rb Then
rs1.Fields("后视视高1") = HouSHiSHiGao
rs1.Fields("后视视距1") = HouSHiJu
rs1.Fields("测站点") = "后" & QHdianMing
Else
rs1.Fields("后视视高2") = HouSHiSHiGao
rs1.Fields("后视视距2") = HouSHiJu
rs1.Fields("测站点") = "后" & QHdianMing
End If
Rb = Not Rb
End If
If InStr(1, s(3), JianSHiSHiGaoZiDuan) Then '间视点
ChangDu = Len(s(3))
JianShiSHiGao = Val(Trim(Mid(s(3), 3, ChangDu - 5)))
SJChangDu = Len(s(4))
JianSHiju = Val(Trim(Mid(s(4), 3, SJChangDu - 5)))
SJChangDu = Len(s(5))
JianSHiDianGaoCHeng = Val(Trim(Mid(s(5), 2, SJChangDu - 5)))
rs1.Fields("间视点视高") = JianShiSHiGao
rs1.Fields("间视点视距") = JianSHiju
rs1.Fields("间视点高程") = JianSHiDianGaoCHeng
rs1.Fields("测站点") = QHdianMing
End If
If Trim(s(3)) = "" And Trim(s(4)) = "" Then
ChangDu = Len(s(5))
QianSHiDianGaoCHeng = Val(Trim(Mid(s(5), 3, ChangDu - 5)))
'QHdianMing = Trim(Mid(s(2), 4, 15))
rs1.Fields("前视点高程") = QianSHiDianGaoCHeng
rs1.Fields("测站点") = "高程" & QHdianMing
End If
rs1.Update
End If
Loop
rs1.Close
conn1.Close
Close
MsgBox "导入成功!"
1-1
3 数据的处理
数据进入access数据库后,充分利用ADO对象模型的数据访问策略 ,可以任意输出成多种格式,例如输出成EXCEL的格式。首先充分利用了microsoft office 11.0 object library进行EXCEL对象的定义:
Dim SHuiZHunexcel1 As Object '定义Excel对象
Dim SHuiZHunbook1As Object '定义工作簿对象
Dim SHuiZHunsheet1 As Object '定义工作表对象
Set SHuiZHunexcel1 = CreateObject("excel.application") '创建Excel应用程序对象
Set SHuiZHunbook1 = SHuiZHunexcel1.Workbooks.Add '添加工作簿
Set SHuiZHunsheet1 = SHuiZHunbook1.Worksheets(1) '操作的工作表1
然后利用Microsoft ActivX Data Object 2.6 Library ADO进行数据库的连接:
adodblianjie1
rs1.Source = "select * from 水准表 "
rs1.ActiveConnection = conn1
rs1.Open
最后输出成EXCEL格式的文件:
For i = 0 To rs1.Fields.Count - 1
SHuiZHunsheet1.Cells(1, i + 1) = rs1.Fields(i).Name
Next
If rs1.RecordCount > 0 Then
rs1.MoveFirst
For i = 1 To rs1.RecordCount
SHuiZHunsheet1.Cells(i + 1, 1).Value = rs1.Fields("测站点")
SHuiZHunsheet1.Cells(i + 1, 2).Value = rs1.Fields("前视视高1")
SHuiZHunsheet1.Cells(i + 1, 3).Value = rs1.Fields("前视视高2")
SHuiZHunsheet1.Cells(i + 1, 4).Value = rs1.Fields("前视视距1")
SHuiZHunsheet1.Cells(i + 1, 5).Value = rs1.Fields("前视视距2")
SHuiZHunsheet1.Cells(i + 1, 6).Value = rs1.Fields("后视视高1")
SHuiZHunsheet1.Cells(i + 1, 7).Value = rs1.Fields("后视视高2")
SHuiZHunsheet1.Cells(i + 1, 8).Value = rs1.Fields("后视视距1")
SHuiZHunsheet1.Cells(i + 1, 9).Value = rs1.Fields("后视视距2")
SHuiZHunsheet1.Cells(i + 1, 10).Value = rs1.Fields("前视点高程")
SHuiZHunsheet1.Cells(i + 1, 11).Value = rs1.Fields("间视点视高")
SHuiZHunsheet1.Cells(i + 1, 12).Value = rs1.Fields("间视点视距")
SHuiZHunsheet1.Cells(i + 1, 13).Value = rs1.Fields("间视点高程")
rs1.MoveNext
Next
End If
SHuiZHunexcel1.Visible = True '决定excel是否可见
4 使用效果及结论
沉降监测是一项精密的工程测量,由于工作多,任务重,时间要求紧,如果利用常规方法,保质保量按时完成任务,难度很大。限于此因,我做了这个与沉降监测工作配套的程序,极大提高了工作效率。此软件已在工作中使用很长时间了,迄今为止运行稳定,性能、效果良好。由于篇幅所限只能列举天宝DINI03的仪器数据,把数据导入,部分数据处理与同行分享,以此共勉。
参考文献Visual Basic函数参考大全 人民邮电出版社赛奎春 李俊民编著
ISBN 978-7-115-15387-6 2007.4
测量学(第四版)同济大学出版社顾孝烈等编著
ISBN 978-7-5608-4458-8 2012.2
变形监测数据处理武汉大学出版社黄声享等编著
ISBN 978-7-307-08227-4 2010.10