かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

暇なので手抜き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でさくっと何かライブラリ入れて片づけてしまいたい。