一种config文件格式和用Tcl读取的方法

风行水上 @ 2011-12-07 18:41:42
标签:

    一种文本格式的配置文件格式

    name1 : name_1 value
    name2 : name_2 value 1
     :: name_2 value 2
     :: name_2 value 3
    
    name1 :: name1 value 2
    
    p3.n4.k5: name_3 value
    

    用Tcl读取的方法

    proc read_cfg {varname {file "app.cfg"} {append 0}} {
      upvar $varname prscfg
      if {!$append} {array unset prscfg}
      set fp [open $file]
      set last_k "-"
      while {[gets $fp line] >= 0} {
        if [regexp {^[ \t]*#|^[ \t]*$} $line] continue ;# skip empty line and comment line
        if ![regexp {^\s*([\w\.\-\_]*)(::?)(.*)} $line m k sp v] continue
        set k [string trim $k]     ;# remove the space of the string $k
        if {$k == ""} {set k $last_k}
        set last_k $k
        if {$sp==":"} {
          array set prscfg [list $k [string trim $v]]
        } else {
          if [info exists prscfg($k)] {
            array set prscfg [list $k [string trim [join [list $prscfg($k) $v] "\n"]]]
          } else {
            array set prscfg [list $k [string trim $v]]
          }
        }
      }
      close $fp
      return
    }
    
    #----------------------------------------------------
    #  Usage: 
    #----------------------------------------------------
    
    read_cfg appcfg
    
    array set cfg [list k1 v1 k2 v2]
    read_cfg cfg "file.cfg" 1
    puts $cfg(k1)
    
    标签:

      分享到:
      comments powered by Disqus

      26/28ms