.NET 용 명령 줄 인수 파서 찾기
http://www.sellsbrothers.com/tools/Genghis/ 에서 "명령 줄 파서"와 같은 명령 줄 인수 파서를 찾고 있습니다.
내가 찾고있는 기능 :
- 사용량 자동 생성
- 필수 및 선택 매개 변수를 확인할 수 있어야합니다.
- 매개 변수는 구분 기호를 지원하는 IEnumerable을 지원해야합니다.
- 플래그 매개 변수를 지원해야합니다.
- "/ fx"== "/ f / x"와 같은 매개 변수 결합을 지원하면 좋을 것입니다.
- "/ftest.txt"== "/ f test.txt"와 같은 매개 변수 뒤에 공백을 입력하지 않는 것이 좋습니다.
추신 : "명령 줄 파서"는 꽤 훌륭합니다. 디자인이 정말 마음에 들지만 문서도없고 새로운 업데이트도없고 필요한 매개 변수를 확인하는 방법과 같은 특정 작업을 수행 할 수 없었습니다.
개인적으로 가장 좋아하는 타사 명령 줄 구문 분석 라이브러리는 Command Line Parser 이며 이것이 여러분이 참조하는 것으로 가정합니다. 가장 최근 릴리스는 2 개월이 채되지 않았으며 정기적 인 커밋이 있습니다. 보다 성숙한 제품을 원한다면 모노 프로젝트에서 콘솔 라이브러리를 확인할 수 있습니다 (현재 네임 스페이스에 대한 직접 링크를 찾을 수 없지만 모노 프레임 워크의 일부입니다).
ndesk.options를 살펴보십시오.
지금은 Mono.Options 라고 합니다.
인기 있고 매우 포괄적 인 C 명령 줄 구문 분석기는 GNU getopt 입니다. 이것은 C # /. Net 용으로 여러 번 포팅 (또는 복제)되었습니다. 이들 중 일부는 다음과 같습니다.
- freshmeat.net의 getopt #
- PHPGuru의 C # getopt
- CodeProject의 XGetoptCS
- CodeProject의 .NET 용 GetOpt
- Codeplex의 Getopt C # .NET
선택해라! 다른 몇 가지가 있으며 Google에서 이에 대해 알려줄 수 있습니다.
안타깝게도 표준 방식으로 처리하기위한 기본 지원이 없습니다. PowerShell을 살펴 보셨습니까? 나는 그 쉘에 당신이 원하는 것을 정확히 수행하는 클래스가 있다고 확신합니다.
편집 : fatcat1111이 지적 했듯이이 기능은 .net 4.0의 최종 버전과 함께 제공되지 않았습니다.
C # 4.0에는 꽤 좋은 기능이 있습니다. 아마도 아직별로 도움이되지는 않을 것입니다. 그러나 당신은 그것이 나올 때 빌트인으로의 점프를 쉽게 만들어 줄 무언가를 고려하고 싶을 것입니다. Bart De Smet은 B # 블로그 에서 이에 대해 이야기했습니다.
이봐:
C #에서 명령 줄 인수를 구문 분석하는 가장 좋은 방법은 무엇입니까?
이 파서를 사용하기 시작하면 직접 유지 관리하거나 다른 사람에게 의존하여 유지 관리해야합니다. 가장 중요하고 즉각적인 요구 사항부터 시작하여 직접 작성하는 것이 더 나을 수 있습니다. 내가 작업 한 대부분의 콘솔 기반 애플리케이션에 대해 상당히 복잡한 명령 줄 구문 분석을 생성하는 데 너무 많은 작업이 필요하지 않음을 발견했습니다.
또한 구문 분석이 너무 복잡해지면 명령 줄 사용을 중지해야 할 때라는 것도 발견했습니다.
나는 이것이 당신이 찾고있는 것이 아니라고 확신합니다.
여기 누군가가 그 문제를 가지고 있었고, 그의 첫 생각은 "야, ocaml은 꽤 좋은 것이 있습니다!"였고, 신속하게 F #으로 포팅했습니다.
C # 3.0 쿡북에서 파서를 사용하고 있습니다.
이 책의 모든 예제는 http://examples.oreilly.com/9780596516109/에서 다운로드 할 수 있습니다 .
'인수'를 검색하면 찾을 수 있습니다. 모든 것을 자신의 클래스로 가져 오려면 약간의 코드 변경을해야하지만 이것은 큰 문제가 아닙니다.
마지막 두 포인트를 제외한 모든 포인트를 지원합니다 (파라미터 결합 및 누락 된 공간).
BizArk 라이브러리는 명령 줄 구문 분석기가 포함되어 있습니다.
기본적으로 CmdLineObject에서 상속하는 클래스를 만들고 명령 줄에서 채우려는 속성을 추가하고 속성에 CmdLineArgAttribute를 추가 한 다음 프로그램에서 Initialize를 호출하면됩니다. ClickOnce URL 인수도 지원합니다!
기능 (사이트에서) ...
- 자동 초기화 : 클래스 속성은 명령 줄 인수에 따라 자동으로 설정됩니다.
- 기본 속성 : 속성 이름을 지정하지 않고 값을 보냅니다.
- 값 변환 : BizArk에 포함 된 강력한 ConvertEx 클래스를 사용하여 값을 적절한 유형으로 변환합니다.
- 부울 플래그. 플래그는 단순히 인수 (예 : true의 경우 / b, false의 경우 / b-)를 사용하거나 true / false, yes / no 등의 값을 추가하여 지정할 수 있습니다.
- 인수 배열. 명령 줄 이름 뒤에 여러 값을 추가하여 배열로 정의 된 속성을 설정하기 만하면됩니다. 예를 들어, / x 1 2 3은 x를 {1, 2, 3} 배열로 채 웁니다 (x가 정수 배열로 정의되었다고 가정).
- 명령 줄 별칭 : 속성은 여러 명령 줄 별칭을 지원할 수 있습니다. 예를 들어, 도움말은?라는 별칭을 사용합니다.
- 부분 이름 인식. 전체 이름이나 별칭을 철자 할 필요가 없으며 파서가 속성 / 별칭을 다른 것과 명확하게 구분할 수 있도록 철자 만 입력하면됩니다.
- ClickOnce 지원 : ClickOnce 배포 응용 프로그램의 URL에 쿼리 문자열로 지정된 경우에도 속성을 초기화 할 수 있습니다. 명령 줄 초기화 메서드는 ClickOnce로 실행 중인지 여부를 감지하므로 사용할 때 코드를 변경할 필요가 없습니다.
- 자동 생성 /? help : 여기에는 콘솔의 너비를 고려한 멋진 형식이 포함됩니다.
- 명령 줄 인수를 파일에로드 / 저장 : 여러 번 실행하려는 크고 복잡한 명령 줄 인수 집합이 여러 개있는 경우 특히 유용합니다.
저는 Python에 내장 된 라이브러리 인 OptParse에 대한 C # 포트의 팬입니다. 여기에있는 대부분의 다른 제안에 비해 사용하기가 다소 간단하며 자동 구문 분석 외에도 여러 유용한 기능이 포함되어 있습니다.
사용하기 쉽고 확장 가능한 명령 줄 인수 구문 분석기. 핸들 : 부울, 플러스 / 마이너스, 문자열, 문자열 목록, CSV, 열거.
'/?'에 내장 도움말 모드.
'/ ??'에 내장 및 '/? D'문서 생성기 모드.
static void Main(string[] args)
{
// create the argument parser
ArgumentParser parser = new ArgumentParser("ArgumentExample", "Example of argument parsing");
// create the argument for a string
StringArgument StringArg = new StringArgument("String", "Example string argument", "This argument demonstrates string arguments");
// add the argument to the parser
parser.Add("/", "String", StringArg);
// parse arguemnts
parser.Parse(args);
// did the parser detect a /? argument
if (parser.HelpMode == false)
{
// was the string argument defined
if (StringArg.Defined == true)
{
// write its value
RC.WriteLine("String argument was defined");
RC.WriteLine(StringArg.Value);
}
}
}
Edit: This is my project and as such this answer should not be seen as an endorsement from a third party. That said I do use it for every command line based program I write, it is open source and it is my hope that others may benefit from it.
참고URL : https://stackoverflow.com/questions/631410/looking-for-a-command-line-argument-parser-for-net
'Nice programing' 카테고리의 다른 글
ADL이 함수 템플릿을 찾지 못하는 이유는 무엇입니까? (0) | 2020.10.10 |
---|---|
Async await 키워드는 ContinueWith 람다와 동일합니까? (0) | 2020.10.10 |
libGDX에서 다른 종횡비를 처리하는 방법은 무엇입니까? (0) | 2020.10.10 |
ES6의지도 대 개체, 언제 사용합니까? (0) | 2020.10.10 |
구분 기호를 제거하지 않고 Python split () (0) | 2020.10.10 |