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

アニメ『にゃんこデイズ』
人面猫? にゃんこというから猫が出てくるかと思ってたんですが、小人が三匹。
とにかく三匹の何かと戯れるお話です。5分アニメなので、始まったと思ったらあっという間に終わります。

今回はcatと戯れます。
headがあれば、headをちょっと改造するだけでcatが作れます。前回作ったhead風コマンドが左。それを元に今回修正したcat風コマンドが右です。

10行目でcatでよく使うオプション-nの判定をしています。C#における文字列の比較は、変数==”文字列”、とするだけで比較できます。
28行目のiの初期化を6行目にもっていっています。catで複数ファイルを指定したとき、-nではまとめてナンバリングされるため、毎回i=1をしていては都合が悪いのです。かつ、catではファイルを全部表示するため、行数で終了判定する必要がありません。
右側の28行目では、フォーマットを指定して文字列を表示しています。{0,6}という書き方はまったく慣れません。なぜこんな設計にしたのでしょうか。printfの書式じゃだめなんですかねえ。そういえばJAVAも最初の頃はprintfありませんでしたね。C#でもできたら嬉しい。

cat風のソースです。

     1	using System;
     2	using System.IO;
     3	
     4	class Cat{
     5		static void Main(string[] args){
     6			int i=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 line;
    26				for(;(line=tr.ReadLine())!=null;i++){
    27					if(nflag==1)
    28						Console.Write(String.Format("{0,6}	", i));
    29					Console.WriteLine(line);
    30				}
    31				tr.Dispose();
    32			}while(++fileind<args.Length);
    33		}
    34	}

実行結果です。

Leave a Reply

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

CAPTCHA