C#管道流代码示例

本章内容讲了C#代码实现管道流的详细过程,通过管道流读取文件,然后对文件进行移位操作,最后将其回写入管道流

源代码详见github
https://github.com/zhazhalin/HDWK.git

1. 问题描述:

(1)input.txt文本文件存放多行字符串;
(2)每行字符串由多个单词组成;每个单词由空格分隔做如下操作:
(3)系统从文本文件中读入字符串
(4)对每个字符串中的单词进行循环移位操作
如:i love you 移位后 存在如下字符串
i love you
love you i
you I love
(5) 对移位后的所有字符串进行按字母排序
(6) 将排序后的所有字符串输出到 另一个文本文件output.txt中

2. 管道-过滤器建模

将问题抽象为管道和过滤器
在这里插入图片描述

Filters:
– Input filter (“输入”过滤器:从数据源读取输入文件,解析格式,将行写入输出管道)
– CircularShifter filter (“循环移位”过滤器)
– Alphabetizer filter (“排序”过滤器)
– Output filter (“输出”过滤器)
 Pipe:
– in_cs pipe
– cs_al pipe
– al_ou pile
在这里插入图片描述

类图:
在这里插入图片描述

在这里插入图片描述

3.代码实现

A. 先建立一个控制台项目
在这里插入图片描述

B.添加 Pipe.cs 类文件
在这里插入图片描述
Pipe代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KWIC
{
   
    public class Pipe
    {
   
        Queue<String> q1;
        public Pipe()
        {
   
       	  //实现 对 q1 初始化 即 分配空间 
           q1=new Queue<string>();
        }
        public void Write(String str1) //将str1写入管道中
        {
   
            //将str1加入到q1队列中,进行入队操作
            q1.Enqueue(str1);
        }
        public String Read() //从管道中读取一个字符串
        {
   
            //当q1队列中元素个数>0时,调用q1的出队方法 将字符串存入st中
            String st = null;  
            if (!Empty())
            {
   
                st=q1.Dequeue();
            }
            return st;
        }
        public Boolean Empty() //判断管道是否为空,如果为空返回 true,否则 返回false
        {
   
            Boolean b = true;
            //判断 q1队列是否为空
            if (q1.Count > 0)
            {
   
                return false;
            }
           
            return b;
        }
    }
}

C.完成 上面的代码后,建立 Filter.cs 类文件 并建立 Filter抽象类
代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace KWIC
{
   
    public abstract class Filter
    {
   
        protected Pipe inpipe;
        protected Pipe outpipe;
        public Filter()
        {
   
        }
        public Filter(Pipe pipeinput, Pipe pipeoutput)
        {
   
            //构造函数对 inpipe和outpipe 初始化
            this.inpipe = pipeinput;
            this.outpipe = pipeoutput;
        }
        public abstract void transform(); //抽象函数 完成过滤器的处理
        public void run()
        {
   
            try
            {
   
                transform();
            }
            catch (Exception ex)
            {
   
                Console.WriteLine(ex.Message);
            }
        }
    }
}

D.建立Filter类的派生类 Input_Filter.cs文件,并建立派生类 Input_Filter
代码如下

using System;
using System.Collections.Generic;
using System.IO;
using System
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值