作成しているコンソールアプリケーションのスペースでユーザー入力を分割する必要がありますが、その方法がよくわかりません。文字列などが引用されているので、やみくもに分割することはできません。これを行う簡単な方法は何ですか?
または、Windowsのコマンドラインパーサーにアクセスして、それを使用して分割する方法はありますか?
作成しているコンソールアプリケーションのスペースでユーザー入力を分割する必要がありますが、その方法がよくわかりません。文字列などが引用されているので、やみくもに分割することはできません。これを行う簡単な方法は何ですか?
または、Windowsのコマンドラインパーサーにアクセスして、それを使用して分割する方法はありますか?
Visual Studioで新しいコンソールアプリケーションを作成すると、次のようになります。
class Program
{
static void Main(string[] args)
{
}
}
アプリケーションに渡されるコマンドライン引数は、「args」パラメーターに含まれます。
コンソール アプリケーションでのユーザー入力は、単純にConsole.ReadLine()です。
次のようなことを試してみてください。
static void Main(string[] args)
{
Console.WriteLine("Input please:");
string input = Console.ReadLine();
// Parse input with Regex (This splits based on spaces, but ignores quotes)
Regex regex = new Regex(@"\w+|""[\w\s]*""");
}
入力を文字列として読み取るには、次を使用します。
string stringInput = Console.ReadLine();
さて、あなたはあなた自身の「トランスデューサー」を作らなければなりません。基本的に、メインでは、switch
ステートメントとConsole.ReadLine()
. ユーザーが実行可能ファイルを実行すると、次のようなものを出力Enter Command:
して、ユーザーの入力を待つことができます。次に、ユーザーの入力をキャプチャしてオンにします。
class Program
{
static void Main(string[] args)
{
string cmd = Console.ReadLine();
switch(cmd)
{
case "DoStuff":
someClass.DoStuff();
break;
case "DoThis":
otherClass.DoThis();
break;
}
}
}
また、ユーザーからの入力コマンドを引き続き受け取りたい場合は、そのようなものを while ループでラップし、ユーザーがQuit
ループから抜け出してプログラムを終了したい場合に使用します。
この回答のおかげで、私はついにそれを手に入れました。これは引用符をチェックしますが、ネストされた引用符については心配しません。その回答へのコメントによると、それが2つの引用符であるかネストされた引用符であるかをどのように知るのでしょうか。文字列はスペースで開始または終了する可能性があるため、実際にはスペースを使用することはできません。
using System.Text.RegularExpressions;
...
Console.Write("Home>");
string command = Console.ReadLine();
Regex argReg = new Regex(@"\w+|""[\w\s]*""");
string[] cmds = new string[argReg.Matches(command).Count];
int i = 0;
foreach (var enumer in argReg.Matches(command))
{
cmds[i] = (string)enumer.ToString();
i++;
}