zoukankan      html  css  js  c++  java
  • eterm协议指令解析

    我们通过Socket方式与中航信系统通讯成功后,就可以发送和接收信息了,当我们把需要发送的指令按eTerm协议要求打包后,就可以发送,这个步骤比较简单,在此就不说明了,重点讲一下如何解析eTerm返回的数据。
          eTerm返回的消息经过一定处理后,返回的是一段纯文本格式数据,对于新手来讲,做到这一步并不难,难的是到这一步后看见一大串杂乱的字符不知道如何下手,怎么才能把这段字符解析成我们需要的格式呢?比如说目前流行的XML格式或是JSON格式,诸如此类。
          下面介绍一种简单的方法来解析这些文本数据,通过分析,我们发现eTerm客户端软件,就是常说的黑屏,显示出来的数据格式很整齐,我们把这个数据复制并粘贴到一个文本文件中,然后用个笨办法来数每一行有多少个字符?答案出来了吧,多试几次,我们很容易看出每一行最多只有80个字符,超过80个字符就会换行,到了这一步,已经成功一半,接下来,我们想办法把返回的文本字符串变成一个数组形式,例如split函数,ASP/C#/JAVA都有类似功能的函数,然后找到分隔符,前面说的每行80字符就会换行,那么我们就以换行符或者回车符作为分隔符,成功得到一个数组后就可以逐行分析返回的数据了,用SubString(0,2)类似的函数就可以把我们需要的元素都提取出来,最后来组成一个XML格式的规范数据集。
    提供两种语言的实例,仅供参考,其他语言基本相同。
    ASP:
    'eterm返回原始字符串重新换行处理函数,每行80个字符,超过80字符即换行
    Function NewLine(s)
    s=replace(s," "," ")
    s=replace(s," "," ")
    s=replace(s," ","")
    s=replace(s," b","")
    s=replace(s," ","")
    cut=""
    strArr = split(s,chr(13))
         For i = 0 To (UBOUND(strArr)-1)
         If Len(strArr(i))>80 Then
           cut=cut&Left(strArr(i),80)&chr(13)&Replace(strArr(i),Left(strArr(i),80),"")&chr(13)
         Else
           cut=cut&strArr(i)&chr(13)
         End If
         Next
    NewLine=cut
    End Function

    C#:
            /// <summary>
            /// Eterm原始字符处理函数:1过滤无效字符 2一行超过80字符自动换行
            /// </summary>
            /// <param name="str">eTerm原始字符串</param>
            /// <returns></returns>
            public static string EtermNewLine(string str)
            {
                str = str.Replace(" ", " ");
                str = str.Replace(" ", " ");
                str = str.Replace(" ", "");
                str = str.Replace(" b", "");
                str = str.Replace(" ", "");
                str = str.Replace("$", "");
                string cut = "";
                string[] strArr = str.Split('\r');
                for (int i = 0; i < strArr.Length; i++)
                {
                    if (strArr.Length > 80)
                    {
                        cut += strArr.Substring(0, 80) + "\r";
                        cut += strArr.Replace(strArr.Substring(0, 80), "") + "\r";
                    }
                    else
                    {
                        //该行不足80字符用空格补足
                        cut += strArr + "\r";
                    }
                }
                return cut;
            }

  • 相关阅读:
    解决:hdfs: org.apache.hadoop.security.AccessControlException(Permission denied)
    新的开始
    死锁问题------------------------INSERT ... ON DUPLICATE KEY UPDATE*(转)
    hql- 使用like的小坑①
    数美面试检讨
    问题:计算foldRight(1)(_-_) 与foldLeft(1)(_-_)值不一样
    学习笔记之流文件操作01(拷贝文件)
    学习笔记之正则表达式
    数据结构之单链表
    (转)消息中间件(二)MQ使用场景
  • 原文地址:https://www.cnblogs.com/soundcode/p/2207043.html
Copyright © 2011-2022 走看看