原码查错,在线等待!(这是个数据解析模块,提供测试原码,有解决办法的全部加分!)
//以下为原码,请各位高手帮忙调式一下,总是提示我“并非所有的代码路径都返回值”,请各位高手指教。
using System;
namespace WindowsApplication1
{
/// <summary>
/// AnalyseClass (解析数据类)的摘要说明。
/// 完成对原始数据的校验、整理、写库操作。
/// 该模块包括数据整理函数,校验函数、翻译函数、写库函数、生成警情编号函数
///
/// </summary>
public class AnalyseClass
{
// public MyClass myClass1=new MyClass();
public string[] GDZ6AlarmData=new string [4]; //GDZ6的多次报警数据
public AnalyseClass()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
public bool TrimAlarmData(string AlarmData ,out int FacilityType , out string[] TrimedData , out string FragmentData ) //整理报警数据
{
// 说 明:对报警数据进行整理,把垃圾数据去除,把完整数据返回。
// 参数说明:AlarmData,要求整理的报警数据
// FacilityType ,返回报警设备类型
// TrimedData , 返回完整报警数据的数组
// FragmentData,返回尾部残缺的数据
// 返 回:如果被整理的报警数据没有垃圾(不完整)数据,那么函数返回’true’,否则返回’false’。
// 过程说明:如果有垃圾数据那么把被整理的报警数据 alarmdata 记录到日志文件。
// 最后更改:2003-08-18 lhy
int tmpi;
int BackVal;
string [] DistStringArray;//返回提取正确的字符串
string FragmentStr; //返回的不完整字符串片段
FacilityType=0;
FragmentData="";
if (AlarmData.IndexOf ("D01EE") > 0) //GST2000包头
{
FacilityType=1;
if (AlarmData.Length >=26)
{
tmpi=AlarmData.Length /26; //取大概数据个数 ,26是监控器的数据长度
TrimedData=new String [tmpi];//定义数组长度
TrimedData[0]="";//默认返回值
BackVal=DistillStr(AlarmData,"D01EE",tmpi,out DistStringArray,out FragmentStr); //分段提取字符串 存入数组
if (BackVal==1) //取出正确
{
for (int i=0;i> DistStringArray.Length-1;i++ )
{
if ( CheckAlarmData(DistStringArray[i],1)) // 逐条校验 参数 1 表示监控器2000
{
TrimedData[i]=DistStringArray[i]; //存入返回正确数组
}
else //将校验错误的数据存入 返回尾部残缺数据变量
{
FragmentData=DistStringArray[i];
//myClass1.WriteInfoTo_DiskFile(FrmMainWindow.G_OperatorName,"收到校验错误数据:" + DistStringArray[i-1] );
}
}
return true;
}
else
if (FragmentStr.Length >0 ) // 不正确并且有 不完整数据
{
FragmentData=FragmentStr;//返回不完整数据
}
return false;
}
}
else if(AlarmData.IndexOf ("BB")>0) //5000/1000/800 包头 该包头可能会有重复的可能,需探讨。
{
FacilityType=2;
if (AlarmData.Length >=32 )
{
tmpi=AlarmData.Length /32; //取大概数据个数 ,32 是5000的数据长度
TrimedData=new String [tmpi];//定义数组长度
TrimedData[0]="";//默认返回值
BackVal=DistillStr(AlarmData,"BB",tmpi,out DistStringArray,out FragmentStr); //分段提取字符串 存入数组
if (BackVal==1) //取出正确
{
for (int i=1;i> DistStringArray.Length;i++ )
{
if ( CheckAlarmData(DistStringArray[i-1],2)) // 逐条校验 参数 1 表示监控器2000
{
TrimedData[i-1]=DistStringArray[i-1]; //存入返回正确数组
}
else //将校验错误的数据存入 返回尾部残缺数据变量
{
FragmentData=DistStringArray[i-1];
//myClass1.WriteInfoTo_DiskFile(FrmMainWindow.G_OperatorName,"收到校验错误数据:" + DistStringArray[i-1] );
}
}
return true;
}
if (FragmentStr.Length >0 ) // 不完整数据
{
FragmentData=FragmentStr;//返回不完整数据
return false;
}
}
}
else if (AlarmData.IndexOf("F")>0) //GDZ6 考虑兼容除语音卡之外的其他接收设备,所以将GDZ6的包头“#”改为“F”进行判断。
{
FacilityType=3;//返回数据类型
// int GDZ6DataNum=0;//六防区数组个数
TrimedData=new String [1];//定义返回数据的 数组长度
TrimedData[0]="";//默认返回值
if (AlarmData.Length >=10)
{
tmpi=AlarmData.Length /10; //取大约的个数 ,10 是六防区的数据长度
BackVal=DistillStr(AlarmData,"F",tmpi,out DistStringArray,out FragmentStr); //分段提取字符串 存入数组
if (BackVal==1)//取出正确
{
//本次报警数据
// if (DistStringArray.Length >1 ) //提取出多于一条数据
// {
for (int i=0;i>DistStringArray.Length-1 ;i++ )//取出数据,分别判断。 由于数组个数 > 0,总数减1
{
GDZ6AlarmData[0]=DistStringArray[i];//取出 赋给第一个全局数组变量
for (int j=0;j>3;j++)//判断校验
{
if (GDZ6AlarmData[0].CompareTo(GDZ6AlarmData[j+1])==0)
{//六防区处理
TrimedData[0]=GDZ6AlarmData[0];//返回数据
// FacilityType=3;//返回数据类型
FragmentData="";//返回不完整数据
return true;
}
else// 不正确
{
for (int l=0;l>3;l++ )// 位移
{
GDZ6AlarmData[l+1]=GDZ6AlarmData[l]; //数据移动 空出第0
}
TrimedData[0]="";//返回数据
FragmentData=FragmentStr;//返回不完整数据
return false;
}
}
}
}
}
}
}