我们通过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;
}