65.9K
CodeProject 正在变化。 阅读更多。
Home

CGetOpt - 一个命令行参数解析类

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.72/5 (16投票s)

2006年2月28日

CPOL

2分钟阅读

viewsIcon

54508

downloadIcon

1447

该类使您能够在任何 C++ 应用程序中轻松解析命令行。

Sample Image - getopt_screen.png

引言

我需要一个简单的(但有效的)参数解析方法。 经过很长时间的搜索,什么也没找到。 这并不意味着没有有用的类,但它们都不符合我的需求。 该类能够解析各种参数。

例如,哪些类能够解析这个

命令行参数

-booltest 1 -log -url www.url-check.com -check true

解析结果

名称 类型
-booltest 1 布尔值
-url www.url-check.com 字符串
-log - -
-check true 布尔值

主要特点如下

  • 不使用 MFC,因此该类可以在 Unix 或 Win32 应用程序中使用
  • 类型检查
  • 区分大小写或不区分大小写,这是可调整的
  • 使用异常而不是整数返回值

这并不是一个屡获殊荣的代码。 但是,这段代码将在使用参数时减轻痛苦。 因此,如果您在使用解决方案中的参数时遇到一些问题,请尝试使用此类来查看它是否符合您的要求。

如何使用

本部分将简要解释如何使用 CGetOpt 类。 如果您还有任何问题,请在下面的论坛中发布您的问题。

首先将这些文件添加到您的项目中

  • GetOpt.cpp
  • GetOpt.h

添加参数

您必须将用户可以输入的所有参数添加到对象中。 这允许该类检查预期参数、类型检查和值检查。 您可以通过调用函数将参数添加到类中

void AddExpectedParameter(string sParameter, bool bValueExpected = true, 
	ParameterType oParamType = PARAMETERTYPE_UNKNOWN);

例如,添加了三个参数

名称 类型
-booltest 布尔值
-url 字符串
-log -
-check 布尔值
// Declare variables
CGetOpt oParamParsing;

// Add some example parameters
oParamParsing.AddExpectedParameter("-booltest", true, PARAMETERTYPE_BOOL);
oParamParsing.AddExpectedParameter("-url", true, PARAMETERTYPE_STRING);
oParamParsing.AddExpectedParameter("-log", false);
oParamParsing.AddExpectedParameter("-check", true, PARAMETERTYPE_BOOL);

添加到 CGetOpt 对象的所有参数现在都可以被用户使用。

解析

命令行解析非常简单。 CGetOpt 类使用不同类型的异常,可以捕获这些异常。

可以抛出的不同异常是

异常类型 描述
WrongTypeException 使用了错误的参数类型
ValueExpectedException 期望值,但未给出任何值
UnknownParameterException 使用了未知参数
DoubleParametersException 参数被使用了两次

一个带有错误检查的简单解析示例(捕获了所有异常)

try
{
    // Parse parameters
    oParamParsing.ParseCommandLine(szCommandLine);
}
catch (exception & ex)
{
    printf("%s\n", ex.what());
}

读取参数结果

有两种读取参数结果的方法

  1. 手动调用所有参数。

    参数是否已使用?

    ParameterUsed(string sParameter);

    获取参数的值

    Param oInfo = GetParameterResultInfo(string sParameter);
    printf("%s => %s\n", oInfo.sParameter.c_str(), oInfo.sValue.c_str());
  2. 遍历所有已使用的项目
    // Show results
    for (int i = 0; i < oParamParsing.GetParameterResultCount(); i++)
    {
        Param oInfo = oParamParsing.GetParameterResultInfo(i);
        printf("%s => %s\n", oInfo.sParameter.c_str(), oInfo.sValue.c_str());
    }

CGetOpt 演示

还包含一个小演示。 演示包含与本文中作为示例给出的代码相同的代码。

演示工作起来很简单。 您启动应用程序,将四个基本参数添加到允许的参数中,您可以尝试输入参数列表。

当您想退出演示应用程序时,只需在空行中按回车键。

历史

  • 2006 年 3 月 7 日
    • 发布了 1.1 版,其中包含在检查有效整数类型时的小错误修复
  • 2006 年 2 月 28 日
    • 首次发布
© . All rights reserved.