【问题标题】:C# equivalent to Perl's Getopt::LongC# 等价于 Perl 的 Getopt::Long
【发布时间】:2023-04-10 07:05:01
【问题描述】:

我正在将一些旧的 Perl 脚本转换为 C#,我需要保持功能基本相同。为了做到这一点,我需要解析命令行,类似于 Perl 的 Getopt::Long 的工作方式,但我很难弄清楚如何做到这一点。如果有人可以让我知道这样做的好方法或向我指出一个好的参考方向,我将不胜感激。

【问题讨论】:

  • 与其说“我需要像 Perl 的 Getopt::Long 一样做”,我猜大多数 C# 程序员以前从未见过,最好举个例子您需要解析的命令行参数并解释您无法重现的功能。
  • 你能举例说明它是如何工作的吗?
  • @Rakitić,一个例子不会很有用。它的核心是支持-f/--foo-f=arg/--foo arg(其中参数可能是可选的或必需的)。但它支持的远不止这些。它支持--。它支持捆绑(可配置)。它可以检查选项参数是否为数字。它支持在选项存在时触发的回调。它支持使用no- 否定无参数选项。它支持数组(例如--foo a --foo b => [a,b])。它支持传递无法识别的选项(可配置)。它支持备用选项前缀(例如+foo)......

标签: c# perl command-line-arguments long-integer getopt


【解决方案1】:

Jonathon Pryor 出于同样的动机编写了 mono.Options,如他的博文中所述:http://www.jprl.com/Blog/archive/development/mono/2008/Jan-07.html

我已经在几个项目中使用了它,保留了所有的属性 cmets,并且只是将文件扔到了我的项目目录中。非常适合我。

这是我的工作:

string iniFilePath = null;

OptionSet os = new OptionSet()
    { { "ini="
      , "Valid path to an ini file."
      , (s) => { iniFilePath = s; }
      } };
List<string> extra;
try  {
    extra = os.Parse( Application.CommandLineArguments );
    return iniFilePath;
}
catch ( OptionException oex ) {
    Library.ExceptionHandler.handle( oex );
}
return null;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多