2016-09-29 4 views
9

挨拶、文字列をコマンドライン引数に分割(NOT PARSE)するC#

私は単純な問題のようですが、非常にそうはありません。私は文字列を取り、それをコマンドライン引数に分割したい。私は何週間もこの質問をしていて、私のニーズに合ったものは見つけられません。

たとえば、行: --foo=bar -foo="bar test" --foo "bar \"test\"" --foo bar

は、に分けます:(この順序で)

  • --foo=bar
  • -foo=bar test
  • --foo
  • bar "test"
  • bar

EDIT

  • --foo
  • は、はい、私は多くのこと、一度使用され--foo実現します。これは分割/トークン化です。解析しないで、それは次のステップです。私が解析するときにそれがエラーになるかどうか気にしない。何私は今やりたいことは、私は、その後の例を読むMono.Options

    EDIT 2

    に供給することができ、アレイの状態に文字列を取得することです。それが私が達成しようとしているものです。 JUST that。

    +1

    MCVEを作成しましたか? –

    +1

    なぜargsを分割したいのですか?これは通常、コンソールを使用してアプリケーションを実行すると自動的に実行されます。しかし、argsを解析するためには、CommandLine-parserのように多くのツールがあります。 – HimBromBeere

    +0

    @BugFinderは答えを解析するためのものです。トークン化/スプルフィング用ではありません – Cole

    答えて

    -4

    コンソールアプリケーションを実行している場合、コマンドライン引数はMainメソッド(String [] args)に渡されます。とにかく

    、あなたの引数を分割したい場合は、引数が1つの文字列変数であると仮定して、あなたがこれを行うことができますが:

    var arguments = "--foo=bar -foo=\"bar test\" --foo \"bar \"test\" --foo bar"; 
    
    var options = arguments.Split(new String[] { "-", "--" }, StringSplitOptions.RemoveEmptyEntries); 
    
    // Output 
    // [0]: "foo=bar " 
    // [1]: "foo=\"bar test\" " 
    // [2]: "foo \"bar \"test\" " 
    // [3]: "foo bar" 
    

    enter image description here

    +1

    これは "bar test \ –

    +0

    Splitメソッドのオーバーロードを次のコード行で確認する必要があります。var array = arguments.Split(new String [] - "、" - "}、StringSplitOptions.RemoveEmptyEntries); 4つの引数を取得します –

    +1

    例えば、このコマンドラインには、単一のパラメータ 'foo'の* 4つの値が含まれています。さらに、良い構文解析rは動詞、動詞引数、および異なるパラメータ識別子を扱うことができるはずです。 '/'、 '-'、' --'があります。 Splitでは実行できない引用符で囲まれた値を処理できるはずです。正規表現でさえ、この問題を抱えているでしょう –

    -5

    単にEnvironment.GetCommandLineArgs()を使用しています。

    これは、コマンドライン引数を表す文字列を提供します

    +0

    環境変数はコマンドライン引数とはまったく異なります。コマンドライン引数は 'Environment.GetCommandLineArgs'で取り出すことができます。 –

    +0

    sry ... this this :( – Radinator

    +1

    OPが望んでいないもの... –