白云网站建设公,公司网站建设找哪家,平舆网站建设,网络公司哪个效果好Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件#xff0c;但 ADCP 后处理软件无法写入信息2.3… Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误 前言一、WinRiver II 测量项目 MMT 文件的结构二、WinRiver II 无法打开或操作测量项目 MMT 文件2.1 无法载入船测多线法测量文件2.2 可以载入测验项目 MMT 文件但 ADCP 后处理软件无法写入信息2.3 无法打开或操作测量项目 MMT 文件的原因 三、符合与违反 XML 文件规则的字符3.1、符合规则的单字节的英语字母和符号0-9、a-z、A-Z、-*/[]等3.2、符合规则的双字节的阿拉伯字母和符号3.3、符合规则的三字节的UTF-8 编码字符UTF-8 编码的汉字或其它区域文字3.4、常见违反 XML 规则的非法字符3.5、违反 XML 规则非法字符的替代字符 四、测量项目 MMT 文件常见错误内容4.1 测站信息区域中文字段容易出现非法字符4.2 QA/QC ADCP 测试区域字段容易出现非法字符 五、Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误5.1 引入类空间名称5.2 处理和修复 MMT 文件错误的代码主体 前言
WinRiver II 测量项目文件扩展名为 MMT是声学多普勒流速剖面仪简称 ADCP 测量软件 WinRiver II 的测量项目文件是现代水域剖面流量测验的重要技术方法。
一、WinRiver II 测量项目 MMT 文件的结构
WinRiver II 测量项目 MMT 文件的结构实际是 XML 结构遵循 XML 标准文件编码是 UTF-8 LE (无 BOM )文件结构如下所示:
?xml version1.0 encodingUTF-8?
WinRiverProject Namebs20240418_1.mmt Version1.0.0.2 Flags0LockedFalse/LockedSite_Information Type1 Checked1 Status0 Error0Agency长江勘测局/AgencyCountry中国/CountryState湖北省/StateCounty武汉市/CountyDistrict江岸镇/DistrictHydrologicUnit长江水文局/HydrologicUnitParty江岸分局/PartyBoatMotorUsed水文668快艇/BoatMotorUsedProcessedBy赵钱孙/ProcessedByADCPSerialNmb21924/ADCPSerialNmbDescription江岸村/DescriptionGrid_Reference长江/Grid_ReferenceNumber61500001/NumberName白沙二/NameRiver_Name长江干流/River_NameMeasurement_Date04/18/2024/Measurement_DateRating_Number1/Rating_NumberWind_Speed2/Wind_SpeedWind_DirectionS/Wind_DirectionEdge_Measurement_Method /Edge_Measurement_MethodMagnetic_Var_Method模型/Magnetic_Var_MethodMeasurement_Rating优(2%)/Measurement_RatingControlCode14-畅流/ControlCode1ControlCode27-杂物量少/ControlCode2ControlCode39-水生植物量少/ControlCode3MeasurementNmb1/MeasurementNmbRemarks2S p8 0.14/RemarksTimeZone中国夏令/TimeZoneDeploymentType0/DeploymentTypeUse_Inside_Gage_Height1/Use_Inside_Gage_HeightMagnetic_Var_Method_Index1/Magnetic_Var_Method_IndexMeasurement_Rating_Index1/Measurement_Rating_IndexControlCode1_Index3/ControlCode1_IndexControlCode2_Index6/ControlCode2_IndexControlCode3_Index8/ControlCode3_IndexInside_Gage_Height30.310000/Inside_Gage_HeightOutside_Gage_Height0.000000/Outside_Gage_HeightGage_Height_Change0.000000/Gage_Height_ChangeRating_Discharge0.000000/Rating_DischargeIndex_Velocity0.000000/Index_VelocityRated_Area0.000000/Rated_AreaWater_Temperature-32768.000000/Water_TemperatureTail_Water_Level30.310000/Tail_Water_LevelReferenceBT/ReferenceUse_Old_Sidelobe_Method0/Use_Old_Sidelobe_Method/Site_InformationSite_Discharge Type2 Checked1 Status0 Error0!-- 省略...... --/Site_DischargeQA_QC Type3 Checked1 Status0 Error0!-- 省略...... --/QA_QCCollect_Data Type4 Checked1 Status0 Error0!-- 省略...... --/Collect_DataDisplaySettingsGlobalsDepth_Max15.000000/Depth_Max/Globals/DisplaySettings/Project
/WinRiver
二、WinRiver II 无法打开或操作测量项目 MMT 文件
当 WinRiver II 测验完成进行后处理时有时候发现无法打开或载入测验项目 MMT 文件。
2.1 无法载入船测多线法测量文件 2.2 可以载入测验项目 MMT 文件但 ADCP 后处理软件无法写入信息
在 ADCP 后处理软件进行计算后无法写入准确的水边距等信息
2.3 无法打开或操作测量项目 MMT 文件的原因
无法打开或操作测量项目 MMT 文件的原因是 MMT 文件写入了违反 XML 规则的字符
A、测验工作时外围设备 USB 串口接触不良、屏蔽不良 B、测验完成后WinRiver II 软件没有正常退出 C、测验完成后WinRiver II 软件没有关闭测量模式进行了违规操作 D、测验完成后WinRiver II 软件回放数据进行编辑操作时外围设备 USB 串口没有正常拨出 E、WinRiver II 软件可能存在 UTF-8 中文处理不严谨的 BUG F、使用记事本的 ANSI 编码打开和编辑了 UTF-8 编码的测量项目 MMT 文件导致 UTF-8 编码异常
三、符合与违反 XML 文件规则的字符
3.1、符合规则的单字节的英语字母和符号0-9、a-z、A-Z、±*/[]等
常见数字、字母的十六进制
字母或符号十六进制0-9\x30、\x31、\x32、\x33、\x34、\x35、\x36、\x37、\x38、\x39A-Z\x41、\x42、\x43、\x44、\x45、\x46、\x47、\x48、\x49、\x4A、\x4B、\x4C、\x4D、\x4E、\x4F、\x50 - - - -\x5Aa-z\x61、\x62、\x63、\x64、\x65、\x66、\x67、\x68、\x69、\x6A、\x6B、\x6C、\x6D、\x6E、\x6F、\x70 - - - -\x7A空格 ! 双引号 “\x20、\x21、\x22# $ % ’ ( ) * , - . /\x23、\x24、\x25、\x26、\x27、\x28、\x29、\x2A、\x2B、\x2C、\x2D、\x2E、\x2F: ; ? \x3A、\x3B、\x3C、\x3D、\x3E、\x3F、\x40[ \ ] ^ _ \x5B、\x5C、\x5D、\x5E、\x5F、\x60{ } ~\x7B、\x7C、\x7D、\x7E
常用控制符十六进制Tab 制表符\x09换行符\x0A回车符\x0D
3.2、符合规则的双字节的阿拉伯字母和符号
3.3、符合规则的三字节的UTF-8 编码字符UTF-8 编码的汉字或其它区域文字
3.4、常见违反 XML 规则的非法字符
常见导致 XML 无法正常载入的非法字符以十六进制表示
非法字符范围十六进制\x0-\x8、\x0B-\x0C\x00、\x01、\x02、\x03、\x04、\x05、\x06、\x07、\x08、\x0B、\x0C\x0E-\x1F\x0E、\x0F、\x10、\x11、\x12、\x13、\x14、\x15、\x16、\x17、\x18、\x19、\x1A、\x1B、\x1C、\x1D、\x1E、\x1F\xD800 - \xDFFFxD800、xD801、xD802、xD803、xD804、xD805、xD806、xD807、xD808、xD809、xD80A、…、xDFFE、\xDFFF\xFFFD - \xFFFF\xFFFD、\xFFFE、\xFFFF
3.5、违反 XML 规则非法字符的替代字符
非法字符十六进制 EF BF BD 通常是因为在处理包含UTF-8编码的XML文件时遇到了无法识别的字节序列。十六进制 EF BF BD 是UTF-8编码中的“替代字符”它通常表示数据在解码时遇到了问题。当载入XML 文件中有 UTF-8 编码中的“替代字符”也是存在 XML 无法识别的字节。
四、测量项目 MMT 文件常见错误内容
4.1 测站信息区域中文字段容易出现非法字符 由上图可见黑色标注块出现了非法字符。当出现这类情况原有 UTF-8 编码的中文出现错误同时引起 XML 《开始标签》没有相应匹配的《结束标签》如上图 State 没有匹配的结束标签 /State 、 County 没有匹配的结束标签 /County 等或者标签缺失标志。主要原因可能是外界异常操作导致 UTF-8 编码的中文出现异常或WinRiver II 软件可能存在 UTF-8 中文编码处理不严谨的 BUG
4.2 QA/QC ADCP 测试区域字段容易出现非法字符 由上图可见黑色标注块是出现的非法字符当出现这类情况主要原因可能是外界电气接触不良 或 ADCP 串口输出了异常字符而 WinRiver II 软件没有进行相应处理。导致出现 UTF-8 异常编码
五、Visual Studio C# 处理和修复 WinRiver II 测量项目 MMT 文件错误
5.1 引入类空间名称
using System;
using System.IO;
using System.Text;
using System.Windows.Forms;
using System.Xml;5.2 处理和修复 MMT 文件错误的代码主体 static readonly Encoding UTF8NoBOM new UTF8Encoding(false);//UTF-8 LE 编码OpenFileDialog Openfiledialog new OpenFileDialog();Openfiledialog.Filter ADCP项目文件(*.MMT)|*.MMT;Openfiledialog.Title 打开 ADCP 项目 MMT 文件;Openfiledialog.FilterIndex 0;if (Openfiledialog.ShowDialog() DialogResult.OK){try{string MmtPathFile Openfiledialog.FileName;string MmtFileString File.ReadAllText(MmtPathFile, Encoding.UTF8);\\将 MMT 项目文件载入到字符串foreach (char chr in MmtFileString){int Val Convert.ToInt32(chr);if ((Val 0 Val 8) || (Val 11 Val 12) || (Val 14 Val 31) || (Val 55296 Val 57343) || (Val 65533 Val 65535)){MmtFileString MmtFileString.Replace(chr, !);\非法字符暂时用英文感叹号代替}}MmtFileString MmtFileString.Replace(!?/, /);//消除非法字符后修复可能产生的 XML 标签规则异常导致的不匹配MmtFileString MmtFileString.Replace(!?, ?);XmlDocument XMLDoc new XmlDocument();XmlTextWriter XmlWriter new XmlTextWriter(MmtPathFile, UTF8NoBOM);// MMT 文件采用了UTF-8 LE 无 BOM 编码XMLDoc.LoadXml(MmtFileString);XmlWriter.Formatting Formatting.Indented; //XML缩进格式化便于查看内容手工修复非法字符引起的汉字缺失XMLDoc.WriteTo(XmlWriter);XmlWriter.Flush();XmlWriter.Close();MessageBox.Show(文件已经修复请手工修复非法字符引起的汉字缺失或错误, 消息 , MessageBoxButtons.OK);}catch (Exception ex){MessageBox.Show(ex.StackTrace, 程序内部错误: ex.Message, MessageBoxButtons.OK);}}