【问题标题】:What is a good format for command line output when it is being used for further processing?当用于进一步处理时,命令行输出的良好格式是什么?
【发布时间】:2010-04-20 15:09:48
【问题描述】:

我在 Delphi 中编写了一个控制台应用程序,可以从多个位置查询信息。此应用程序将由另一个进程启动,并且 STDOUT 的输出将由启动进程捕获。

我正在检索的信息将由调用应用程序进行解释以用于报告目的。将此数据输出到 STDOUT 以便轻松解析的最佳方法是什么? JSON? XML? CSV?具体来说,数据是远程工作站信息,因此它会拉回诸如正在运行的进程之类的内容,以及有关每个进程的详细信息。

有没有人有这方面的经验或建议?

【问题讨论】:

  • 取决于 - 数据是扁平的还是树状结构的?
  • 很可能两者兼而有之。这就是为什么我倾向于 JSON 以便更容易地保持层次结构层次清晰。

标签: c# c++ delphi console


【解决方案1】:

如果您想要可以轻松解析的内容,尤其是必须快速完成的内容,请使用能够有效传达您所需信息的最简单格式。如果可以,请使用 CSV,否则请尝试使用 JSON。绝对不是 XML,除非你真的,真的因为某种原因需要所有额外的复杂性。

【讨论】:

  • XML 的重点是标准 XML 库会为您处理复杂性。因此,只有在 XML 符合我们的需求时才使用它并且您使用此类库来读取、写入、验证等。
  • @reubueroist 作为 CSV 和 JSON...只是 XML 会创建更大的文件并且解析速度要慢得多...
  • +1 - KISS 的原则 = 始终使用您可以使用的最低通用格式,XML 听起来不错,JSON 非常易于传输 - 但如果可以使用制表符或逗号分隔的列表,它就可以了:D
  • @reinierpost:是的,标准 XML 库可以为您处理复杂性,但仅仅因为某些库在后台执行而不是您在自己的代码中执行,并不意味着这种复杂性是'不在那里,或者它不需要很多系统资源来解析。
【解决方案2】:

我会选择 制表符 分隔的文件,如果您的数据(看起来)不包含该字符,因为它允许最快和最简单的处理. 所有其他格式都更慢且更复杂(即使它们为您提供更多功能)。

最接近的匹配是 CSV,但如果项目包含 CSV 定义的一些特殊字符(空格、逗号、引号等),则 CSV 需要引用该项目。

由于上述原因,制表符分隔格式是最紧凑的格式,因此它具有最大的在线速度。 (由于您说的是远程工作站,我假设您在某种网络上)。

另外,值得一提的是,制表符分隔的格式非常易读,因此在需要时使调试更加容易。

顺便说一句,如果您的数据流中存在 Tab 字符,您可以选择另一个您确定不能存在的字符。 (例如#1等)。当然,如果你的使用场景允许的话,这是可以的。

HTH

【讨论】:

  • 我使用制表符分隔的 URL 编码来避免出现制表符和二进制数据时出现问题。
【解决方案3】:

这完全取决于可用的启动过程。如果它是一个小的 Delphi 应用程序,只需 TStringList 即可轻松解析 CSV。 XML 可能比 JSON 更重要,但 Delphi 附带了 XML 解析器和 AFAIK,而不是 JSON 解析器。

【讨论】:

  • Delphi 2010 有一个非常好的(因此是轻量级的)JSON 引擎。
【解决方案4】:

XML 输出格式的优点是您可以将其通过管道传输到XSL 格式化程序,以便可以将 XML 数据转换为用户友好的 HTML 文档。 (你几乎可以have the cake and eat it too)...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多