首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析C++应用程序大量输入的好方法是什么?

解析C++应用程序大量输入的好方法是什么?
EN

Software Engineering用户
提问于 2017-09-16 23:30:21
回答 3查看 1.1K关注 0票数 -4

对于小型命令行应用程序,我可以使用简单的命令行输入。

./test input.png output.png

但是对于需要大量输入的大型应用程序来说,简单地使用命令行很快就会变得混乱不堪。

./测试cam1.png cam1_focal cam1_principle_x cam1_principle_y cam1_k1 cam1_k2 cam2_k1 . cam2_focal cam2_principle_x cam2_principle_y cam2_k1 cam2_k2 .cam15_focal cam15_principle_x cam15_principle_y cam15_k1 cam15_k2 output.png

处理这一问题的典型方法是什么?我听到我的朋友提到要把所有的输入参数写到XML或JSON文件中,所以它会变成如下所示

/测试config.xml

/测试config.json

应用程序将解析XML文件或JSON文件以获得正确的输入。

如果他是对的,如果我首先选择一个,我应该使用XML还是JSON?

如果他错了,怎样才能正确地处理大量的投入?

编辑:理想情况下,这个方法应该是

  1. 跨平台,这意味着它可以在Windows、Linux和Mac上工作。
  2. 非常可读性和直截了当,因此外部开发人员可以轻松地使用这个应用程序。
  3. 非常灵活,例如,它应该能够处理可选的参数、嵌套的参数、不同的类型,如int、float、string、boolean。
  4. 处理复杂输入的能力,例如3x3旋转矩阵。
  5. C++应用程序本身需要最少的代码来解析这些输入。如果有一个外部库来链接来帮助解析,那么编写更少的代码就更好了。
EN

回答 3

Software Engineering用户

发布于 2017-09-17 08:20:36

在处理命令行程序时,有两种约定使我们(和程序)能够有效地处理大量的参数。

  1. 该程序主要使用命名参数/选项,而不是位置参数/选项。 --这意味着程序的大多数参数都是--focal=<some value> --principle_x=<some value> --principle_y=<some value> -o <output file>形式的。这允许参数成为可选的,并重新排序参数。按照惯例,输入文件可以作为位置参数(在所有其他参数之后)提供。
  2. 程序接受一个参数,该参数指定参数-文件。然后解析这个参数文件,就好像它的内容是作为命令行上的参数提供的一样。

对于大多数程序来说,这两个约定就足够了,因为通常相同的命名参数集适用于所有输入文件。

如果您有更复杂的需求,例如不同输入的不同参数值,则可以

  • 使用更结构化的文件格式(如XML或JSON )接受参数。每个输入文件要么是一个大文件,要么是一个配置文件,可能会为全局选项添加常规的命令行参数。
  • 指定一条规则,命令行参数将被解释为它们的结构类似于<global options> <input1> <input1 options> <input2> <input2 options> ... <global options>。这意味着可以多次指定像--focal这样的选项,并且总是将其应用于最近在命令行中看到的图像。
  • 如果输入不能组合成单个输出,只需接受一组参数,并要求程序对需要独立参数集的输入执行多次。
票数 3
EN

Software Engineering用户

发布于 2017-09-17 05:10:30

有几件事情可以使用户更容易做到这一点。其中之一就是有名字的论点。例如,如果您查看Unix "find“命令,您将写入参数的名称,然后它的值如下:

代码语言:javascript
复制
find <directory to find in> -name <name pattern> -print

要匹配的名称的参数称为"-name“。

如果您确实想要一个包含参数的文件,那么一个命名它们的文件是有帮助的。像带有节、键和值的.ini文件这样简单的东西很容易实现:

代码语言:javascript
复制
imageFile = cam1.png
cam1Focal = 75
cam1_principle_x = 100
cam1_principle_y = -64
... etc.

这允许文件的读者快速找到他们想要更改的值,并允许不熟悉格式的人有更好的机会理解它。这也可以用于XML或JSON,特别是如果您已经有了一个库来读取这些格式。

另一个要问的问题是,为什么你需要这么多投入。向用户提供一个用户界面,让他们可以选择选项,默认设置是显而易见的,这是否更有意义呢?或者这个应用程序通常是从另一个应用程序调用的,所以参数总是生成而不是输入?如果是这样的话,那也许就无关紧要了。(嗯,正如注释中指出的,您仍然需要进行错误处理,但可读性不是一个因素。)

你也不必在两者之间做出选择。您可以像其他命令一样从命令行执行和接受参数,允许一个参数作为包含其他参数的文件的路径(如"-c < config file >"),或者有一个参数将应用程序设置为“交互式”模式(如Unix上的"rm -i“),并提示用户或任何适当的参数。

票数 1
EN

Software Engineering用户

发布于 2017-09-16 23:43:46

实际上,我会选择比JSON或XML更简单的文件格式。使用每一行只有一个参数的文本文件。没有必要用JSON或XML使事情过于复杂。

因此,您的文本文件config.txt将有:

代码语言:javascript
复制
cam1.png
cam1_focal
cam1_principle_x
cam1_principle_y
cam1_k1
cam1_k2
cam2.png
cam2_focal
cam2_principle_x
cam2_principle_y
cam2_k1
cam2_k2
...
cam15.png
cam15_focal
cam15_principle_x
cam15_principle_y
cam15_k1
cam15_k2
output.png

然后使用./test config.txt运行程序。

显然,如果您想要更丰富的设置,而不是每行格式所能提供的这个参数,那么您可以考虑使用JSON或XML。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/357543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档