【问题标题】:How to read multiline values in inifile如何在inifile中读取多行值
【发布时间】:2023-04-04 06:48:01
【问题描述】:

我正在尝试使用 ini 文件中指定为列表的多行值,我能够读取部分但无法从给定键读取多行值。

我尝试使用列表方式它完全失败了。

# Ini file
[UNITS]
COMPARE_UNITS = [list
                    [11871000 118700]
                    [1198100 1198100]
                ]
[VARS]
OLD_REL = 4.3
NEW_REL = 4.5

我尝试使用基于字符串的格式也失败了,但我可以读取给定键值的部分和第一行。

# Ini file
[UNITS]
COMPARE_UNITS = "
                    11871000 118700
                    1198100 1198100
                "
[VARS]
OLD_REL = 4.3
NEW_REL = 4.5

当我尝试获取键值时,它只返回第一行

% set fileOrg [ini::open "sample.ini" r]
ini11
% foreach sec [ini::sections $fileOrg] {puts [::ini::get $fileOrg $sec]}
NEW_REL 4.5 OLD_REL 4.3
COMPARE_UNITS {1198100 1198100}
%

我有两个问题

  1. 如何使用 package inifile 从给定键中读取多值
  2. 我可以在键中指定列表值吗?

-马利

【问题讨论】:

    标签: tcl ini


    【解决方案1】:

    INI file 格式不支持多行值。规范是带有方括号中的部分名称以开始新部分的行,或者带有键名后跟等号后跟以行结尾的值结尾的行。或注释行。

    tcllib 解析器将文件分成几行,如果该行不是注释,也不是节开始并且不包含等号,则将其丢弃。

    如果你想在一个 INI 文件值中包含多个值,那么你应该使用一些特定于应用程序的字段分隔符或多个键,例如:

    [Test.Field]
    multi-field = first|second|third
    [Test.MultiKey]
    multi.1 = first
    multi.2 = second
    multi.3 = third
    

    第一个版本可以这么简单地使用:

    set ini [ini::open test.ini r]
    set fields [split [ini::value $ini Test.Field multi-field] "|"]
    

    【讨论】:

      猜你喜欢
      • 2011-07-03
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2014-12-05
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 2023-03-19
      相关资源
      最近更新 更多