文本行查询系统[4]-顶层查询类的实现

来源:互联网 发布:cst软件 mac 编辑:程序博客网 时间:2024/04/29 13:07
// Query.cs
using System;
using System.Collections;
using System.Text;

namespace SEI.DL88250.SourceCodes.CSharp.QTL
{
    
/// <summary>查询类的基类
    
/// </summary>
    public abstract class Query
    {
        
/// <summary>文本内容,复制于系统文本缓冲区
        
/// </summary>
        protected static ArrayList _textContent;
        
/// <summary>查询的结果,行号
        
/// </summary>
        protected ArrayList _solutionIndex;

        
/// <summary>缺省的构造器
        
/// </summary>
        
/// <remarks>从系统缓冲区拷贝文本内容</remarks>
        public Query()
        {
            _textContent 
= QTL.textContentBuffer;
            _solutionIndex 
= new ArrayList();
        }

        
/// <summary>抽象查询方法
        
/// </summary>
        public abstract void Search();

        
/// <value>属性,返回/设置结果行号集
        
/// </value>
        
/// <remarks>返回/设置
        
/// <see cref="_solutionIndex"/>字段
        
/// </remarks>
        public ArrayList Solution
        {
            
get { return _solutionIndex; }
            
set { _solutionIndex = (ArrayList)value; }
        }
    }
    
}

 

 

// UnitaryQuery.cs
using System;
using System.Collections;
using System.Text;

namespace SEI.DL88250.SourceCodes.CSharp.QTL
{
    
/// <summary>
    
/// 单关键字查询类
    
/// </summary>
    public class UnitaryQuery : Query
    {
        
/// <summary>查询关键字
        
/// </summary>
        protected string _op;

        
/// <value>返回关键字</value>
        
/// <remarks>返回
        
/// <see cref="_op"/>字段
        
/// </remarks>
        public string Op
        {
            
get { return _op; }
        }

        
/// <summary>缺省的构造器,设查询关键字串为空
        
/// </summary>
        public UnitaryQuery()
        {
            _op 
= null;
        }

        
/// <summary>带参数的构造器,初始化查询关键字串并开始查询
        
/// </summary>
        
/// <param name="op">查询关键字串</param>
        public UnitaryQuery(string op)
        {
            _op 
= op;
            Search();    
        }

        
/// <summary>带参数的构造器,直接根据参数构造查询结果
        
/// </summary>
        
/// <param name="solution">查询结果</param>
        
/// <remarks>这个特殊的构造器主要是提供给NotQuery类方法使用</remarks>
        public UnitaryQuery(ArrayList solution)
        {
            _solutionIndex 
= solution;
        }

        
/// <summary>将包含查询关键字的行记录到结果集合里</summary>
        
/// <remarks>覆盖了基类的Search()方法</remarks>
        public override void Search()
        {
            
for (int i = 1; i < _textContent.Count; i++)
            {
                
if (-1 != ((string)_textContent[i]).IndexOf(_op))
                {
                    _solutionIndex.Add((
object)(i));
                }
            }
        }
    }
}

 

// BinaryQuery.cs
using System;
using System.Collections;

namespace SEI.DL88250.SourceCodes.CSharp.QTL
{
    
/// <summary>
    
/// 二元查询类
    
/// </summary>
    public abstract class BinaryQuery : Query
    {
        
/// <summary>op1的运算结果
        
/// </summary>
        protected ArrayList _resultOfOp1;
        
/// <summary>op2的运算结果
        
/// </summary>
        protected ArrayList _resultOfOp2;

        
/// <summary>缺省的构造器
        
/// </summary>
        public BinaryQuery()
        {
            _resultOfOp1 
= new ArrayList();
            _resultOfOp2 
= new ArrayList();
        }

        
        
/// <summary>带参数的构造器,初始化以前的查询结果
        
/// </summary>
        
/// <param name="q1">运算量1</param>
        
/// <param name="q2">运算量2</param>
        public BinaryQuery(Query q1, Query q2)
        {
            _resultOfOp1 
= q1.Solution;
            _resultOfOp2 
= q2.Solution;
        }
    }
}
原创粉丝点击