2017-02-08 14 views
2

Unityのためにある種のコンソールを作るためにいくつかの研究を行いましたが、私が探していたのは次のようなコマンドラインから引数を取得しようとしています。文字列の単語の前にあるテキストを取得するC#

givemoney -m 1000 

と私は、このコードを見つけました:

public string command = "givemoney -m 1000"; 
string arg = "-m "; 
int ix = command.IndexOf(arg); 
if (ix != -1) 
{ 
    string moneyTG = command.Substring(ix + arg.Length); 
    Debug.Log(moneyTG); 
} 

"moneyTGは" 1000を返し それは素晴らしい作品が、コマンドはちょうど1引数を持っている場合のみ。 例えば:プット

givemoney -m 1000 -n 50 

がmoneyTGが50

-n 1000年を返しますかどうかはどのようにコマンドの他の部分を削除しますか?

+1

あなたの人生を無限に簡単にするために 'string.split'を見てください。 –

答えて

0

- エラーが着るので、簡潔にするために省略チェック」上記の例は単に秒(部品[1])-mされる3つの部分にコマンドを壊す

string command = "givemoney -m 1000"; 
string [] parts = command.Split(' '); 
string arg = "-m"; 
int ix = Array.IndexOf(parts, arg); 
if (ix != -1) 
{ 
    string moneyTG = parts[ix + 1]; 
    Debug.Log(moneyTG); 
} 

、したがって、あなたは後の部分をつかむことができます!t)は、いくつかを追加することなく、これを使用しますお金の価値を得ること。それ以外は無視されます。

+0

ありがとう!それは実際に働いた。いくつかの変更を加えて、私は2つ以上のargsを読むことができました。 'string [] parts = comando.Split( ''); \t \t文字列moneyArg = "-m"; \t \t文字列delArg = "-n"; \t \t int mA = Array.IndexOf(parts、moneyArg); \t \t int dA = Array.IndexOf(parts、delArg); \t \t IF(ミリアンペア= -1!) \t \t { \t \t \tストリングmoneyTG =部分[MA + 1]。 \t \t \t Debug.Log(moneyTG); \t \t \t文字列delT = parts [dA + 1]; \t \t \t Debug.Log(delT); \t \t} ' –

1

あなたが実際に望むのは、コマンドマップのようなものだと思います。

(注意、独自の配列に要素を分離するスプリットを使用することを検討して、その後、あなたが最も簡単な解決策をしたいとコマンドのすべての要素はスペースで区切られていることを仮定し
Dictionary<string, Action<string[]>> commands = new Dictionary<string, Action<string[]>>(StringComparison.OrdinalIgnoreCase); 

commands["command1"] = (args) => { /* Do something with args here */ }; 
commands["givemoney"] = (args) => { 
    if(args.Length == 2) { 
     // args[1] = -m 
     // args[2] = 1000 
    } 
}; 

// etc... 

string example = "givemoney -m 1000"; 
string[] parts = example.Split(' '); 
if(parts.Length > 0) { 
    string cmd = parts[0]; 
    Action<string[]> command; 
    if(commands.TryGetValue(cmd, out command)) 
     command(parts); 
} 
関連する問題