コマンドラインを配列に分割する(C#)

-- Index --

・Top

・Softwares

▼親父の独り言集

・Oracleデータベースに対する独り言集

▼VB.NETやC#に対する独り言集

・ご利用の前に
・Excel遅延バインディング読み書き高速化(C#)
・Excelデータ比較(C#)
・並列処理グループの直列化(C#)
・Treeコマンドもどき(C#)
→コマンドラインを配列に分割する(C#)
・相対パス取得(C#)
・ListViewのフォーカス行取得(VB.NET)
・DataGridViewでパスワードマスク

・我が家の家電事情について

いきさつ

コマンドラインを配列に分割するのは割と高度。なぜならダブルクォーテーションの中のスペースは分割してはならないから。 アプリケーション自身のコマンドラインはEnvironment.CommandLineやEnvironment.GetCommandLineArgs等を利用すれば安易に求められますが、 アプリケーション以外のコマンドラインは、メソッドが用意されていないので、自分で求めるしかないようです。 空白がダブルクォーテーションの中か外かを判別するのは面倒なので、ここではCSVの構造解析に用いられるTextFieldParserクラスを使用してみます。

参考ソース

/// Copyright(c) 2016 pakkin. All Rights Reserved.
/// [改訂履歴]
/// 2016.01.25 作成
using System;
using System.IO;
using System.Linq;
using Microsoft.VisualBasic.FileIO; // Microsoft.VisualBasic - 参照設定を追加

namespace ConsoleApplication1
{
    class Program
    {
        private static string[] DivideCmdLine(string cmdLine)
        {
            using (StringReader sr = new StringReader(cmdLine))
            using (TextFieldParser fp = new TextFieldParser(sr))
            {
                fp.Delimiters = new string[] { " " };
                return fp.ReadFields().Where(x => x.Length > 0).ToArray();
            }
        }

        static void Main(string[] args)
        {
            string[] cmdArgs = DivideCmdLine("  \"C:\\Hoge Hoge\\hoge.exe\"   \"C:\\Hoge Hoge\\hoge1.txt\"   \"C:\\Hoge Hoge\\hoge2.txt\"  ");
            Console.Write(string.Join(Environment.NewLine, cmdArgs));
            Console.ReadKey();
        }
    }
}

実行結果

割とシンプルに記述できたと思います。


Copyright(c) 2014-2017 pakkin. All Rights Reserved.