如何读取inifile中的多行值

时间:2015-03-22 07:58:45

标签: tcl ini

我正在尝试使用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. 从给定密钥中读取多值
  3. 我可以在密钥中指定列表值吗?
  4. -Malli

1 个答案:

答案 0 :(得分:2)

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] "|"]