読者です 読者をやめる 読者になる 読者になる

かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

暇なので手抜きheadコマンドをC#で

using System;
using System.IO;
using System.Linq;

namespace head
{
    class Program
    {
        static void Main(string[] args)
        {
            if (!args.Any())
            {
                Usage();
                return;
            }

            string fileName = null;
            int lineNumber = 10;

            if (args.Length == 1)
            {
                fileName = args[0];
            }

            if (args.Length == 3)
            {
                if (args[0] != "-n")
                {
                    Usage();
                    return;
                }

                if (!int.TryParse(args[1], out lineNumber))
                {
                    Usage();
                    return;
                }

                fileName = args[2];
            }

            if (!File.Exists(fileName))
            {
                // ファイル無い
                return;
            }

            foreach (var line in File.ReadLines(fileName).Take(lineNumber))
            {
                Console.WriteLine(line);
            }
        }

        private static void Usage()
        {
            Console.WriteLine("usage head filename or head -n N filename");
        }
    }
}

-nにしか対応していません。コマンドライン引数のパース処理ってめんどくさいですね…。NuGetでさくっと何かライブラリ入れて片づけてしまいたい。