매개 변수를 사용하는 콘솔 응용 프로그램을 빌드 할 때에 전달 된 인수를 사용할 수 있습니다 Main(string[] args)
.
과거에는 단순히 해당 배열을 인덱싱 / 루프하고 몇 가지 정규 표현식을 수행하여 값을 추출했습니다. 그러나 명령이 더 복잡해지면 구문 분석이 매우 어려워 질 수 있습니다.
그래서 나는 관심이 있습니다 :
- 사용하는 라이브러리
- 사용하는 패턴
명령이 항상 여기에 답변 된 것과 같은 공통 표준을 준수한다고 가정 하십시오 .
답변
NDesk.Options ( Documentation ) 및 / 또는 Mono.Options (동일한 API, 다른 네임 스페이스)를 사용하는 것이 좋습니다 . 설명서 의 예 :
bool show_help = false;
List<string> names = new List<string> ();
int repeat = 1;
var p = new OptionSet () {
{ "n|name=", "the {NAME} of someone to greet.",
v => names.Add (v) },
{ "r|repeat=",
"the number of {TIMES} to repeat the greeting.\n" +
"this must be an integer.",
(int v) => repeat = v },
{ "v", "increase debug message verbosity",
v => { if (v != null) ++verbosity; } },
{ "h|help", "show this message and exit",
v => show_help = v != null },
};
List<string> extra;
try {
extra = p.Parse (args);
}
catch (OptionException e) {
Console.Write ("greet: ");
Console.WriteLine (e.Message);
Console.WriteLine ("Try `greet --help' for more information.");
return;
}
답변
나는 커맨드 라인 파서 라이브러리 ( http://commandline.codeplex.com/ )를 정말 좋아합니다 . 속성을 통해 매개 변수를 설정하는 매우 간단하고 우아한 방법이 있습니다.
class Options
{
[Option("i", "input", Required = true, HelpText = "Input file to read.")]
public string InputFile { get; set; }
[Option(null, "length", HelpText = "The maximum number of bytes to process.")]
public int MaximumLenght { get; set; }
[Option("v", null, HelpText = "Print details during execution.")]
public bool Verbose { get; set; }
[HelpOption(HelpText = "Display this help screen.")]
public string GetUsage()
{
var usage = new StringBuilder();
usage.AppendLine("Quickstart Application 1.0");
usage.AppendLine("Read user manual for usage instructions...");
return usage.ToString();
}
}
답변
WPF TestApi 라이브러리는 C #을 개발을위한 좋은 명령 줄 파서 중 하나와 함께 제공됩니다. API에 대한 Ivo Manolov의 블로그 에서 살펴 보는 것이 좋습니다 .
// EXAMPLE #2:
// Sample for parsing the following command-line:
// Test.exe /verbose /runId=10
// This sample declares a class in which the strongly-
// typed arguments are populated
public class CommandLineArguments
{
bool? Verbose { get; set; }
int? RunId { get; set; }
}
CommandLineArguments a = new CommandLineArguments();
CommandLineParser.ParseArguments(args, a);
답변
답변
모두가 자신의 애완 동물 명령 줄 파서를 가지고있는 것처럼 보입니다.
이 라이브러리에는 명령 줄 의 값으로 클래스를 초기화 하는 명령 줄 파서 가 포함되어 있습니다 . 그것은 많은 기능을 가지고 있습니다 (수년 동안 그것을 구축해 왔습니다).
로부터 문서 …
BizArk 프레임 워크의 명령 줄 구문 분석에는 다음과 같은 주요 기능이 있습니다.
- 자동 초기화 : 클래스 속성은 명령 줄 인수를 기반으로 자동 설정됩니다.
- 기본 속성 : 속성 이름을 지정하지 않고 값을 보냅니다.
- 값 변환 : BizArk에 포함 된 강력한 ConvertEx 클래스를 사용하여 값을 적절한 유형으로 변환합니다.
- 부울 플래그 : 단순히 인수 (예 : true, / b, false / b-)를 사용하거나 true / false, yes / no 등의 값을 추가하여 플래그를 지정할 수 있습니다.
- 인수 배열 : 명령 줄 이름 뒤에 여러 값을 추가하면 배열로 정의 된 속성을 설정할 수 있습니다. 예를 들어, / x 1 2 3은 x를 {1, 2, 3} 배열로 채 웁니다 (x가 정수 배열로 정의되었다고 가정).
- 명령 줄 별칭 : 속성은 여러 명령 줄 별칭을 지원할 수 있습니다. 예를 들어, 도움말은?를 사용합니다.
- 부분 이름 인식 : 전체 이름이나 별칭을 철자 할 필요는 없습니다. 파서가 속성 / 별칭을 다른 속성과 명확하게 구분할 수있을 정도로만 철자를 입력하십시오.
- ClickOnce 지원 : ClickOnce 배포 응용 프로그램의 URL에서 쿼리 문자열로 지정된 경우에도 속성을 초기화 할 수 있습니다. 명령 줄 초기화 방법은 ClickOnce로 실행 중인지 여부를 감지하므로 사용시 코드를 변경할 필요가 없습니다.
- 자동으로 /? 도움말 : 콘솔 너비를 고려한 멋진 형식이 포함되어 있습니다.
- 명령 줄 인수를 파일에로드 / 저장 : 여러 번 실행하려는 크고 복잡한 명령 줄 인수가 여러 개인 경우에 특히 유용합니다.
답변
나는 C # 명령 줄 인수 파서를 잠시 썼다. 그것에서 : http://www.codeplex.com/CommandLineArguments
답변
CLAP (명령 줄 인수 파서)에는 유용한 API가 있으며 훌륭하게 문서화되어 있습니다. 매개 변수에 주석을 달아 메소드를 작성합니다. https://github.com/adrianaisemberg/CLAP