您的位置:首页 > 其它

eterm协议指令解析

2014-05-20 23:44 645 查看
我们通过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;

        }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: