Windows+C#でtac風コマンドを作る


『サカサマのパテマ』(2013)
うっかり手を離してしまうと、大切な人が奈落の底に落ちてしまいます。手をつなぐことの大切さが伝わってきます。相手の重力を利用して、空を飛ぶシーンとか上のPVにも出てきていますが、楽しげに軽やかにジャンプをしているものの、ものすごく怖いシーンに感じました。しっかり胴体にしがみついててくれないと本当心配で。

ではサカサマにするコマンド、tac風コマンドを作ってみます。catがheadをベースにして簡単に作れたように、tacもまたcatから作れます。逆に表示するだけですからね。

catとの差分を見て行きましょう。catが上、—-を挟んで下がtacのプログラムです。

< class Cat{
---
> class Tac{

クラス名がCatからTacになっています。
オブジェクト思考でプログラミングをしているわけではないので、特に名前はなんでも良いのです。

< 		int i=1,nflag=0;
---
> 		int num=1,nflag=0;

変数iがnumに置き換わりました。-nオプションが使えるtacを作ろうと思いますので、nflagはcatで使っていたものをそのまま残します。

< 			string line;
< 			for(;(line=tr.ReadLine())!=null;i++){
< 					Console.Write(String.Format("{0,6}	", i));
< 				Console.WriteLine(line);
---
> 			string[] lines = tr.ReadToEnd().Split('\n');
> 			int i=lines.Length-1;
> 			while(i-->0){
> 					Console.Write(String.Format("{0,6}	", num++));
> 				Console.WriteLine(lines[i]);

ではtac風コマンドのプログラム全体です。

     1	using System;
     2	using System.IO;
     3	
     4	class Tac{
     5		static void Main(string[] args){
     6			int num=1,nflag=0;
     7			int fileind=0,filenum=args.Length;
     8	
     9			try{
    10				if(args[0]=="-n"){
    11					nflag=1;
    12					fileind=1;
    13					filenum--;
    14				}
    15			}catch{
    16			}
    17	
    18			TextReader tr;
    19			do{
    20				if(filenum==0){
    21					tr=Console.In;
    22				}else{
    23					tr=new StreamReader(args[fileind]);
    24				}
    25				string[] lines = tr.ReadToEnd().Split('\n');
    26				int i=lines.Length-1;
    27				while(i-->0){
    28					if(nflag==1)
    29						Console.Write(String.Format("{0,6}	", num++));
    30					Console.WriteLine(lines[i]);
    31				}
    32				tr.Dispose();
    33			}while(++fileind<args.Length);
    34		}
    35	}

実行結果です。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA