Tcl 如何读取文件中的多行值

Tcl 如何读取文件中的多行值,tcl,ini,Tcl,Ini,我试图使用ini文件中指定为列表的多行值,我能够读取节,但无法从给定键读取多行值 我试着用列表的方式,但完全失败了 # Ini file [UNITS] COMPARE_UNITS = [list [11871000 118700] [1198100 1198100] ] [VARS] OLD_REL = 4.3 NEW_REL = 4.5 我曾尝试使用基于字符串的格式,但也失败了,

我试图使用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}
%
我有两个问题

  • 如何使用文件包从给定密钥读取多值
  • 我可以在键中指定列表值吗
  • -Malli

    该格式不支持多行值。规范是以方括号中的节名开始新节的行,或是以键名后跟等号后跟以行尾结束的值的行。或是评论行

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