我开发了一个TCL UI,需要用户输入几个输入。第一次用户将输入所有文件路径但后来我想将用户定义的条目保存在文件中,然后加载它。 保存很好...我想将所有这些变量保存在文件中,但是从文件加载它需要映射,如何完成? 任何例子都会有所帮助
答案 0 :(得分:1)
如果您可以灵活地定义存储内容的文件格式,我建议以一种方式存储内容,使读/写映射到键并且与顺序无关。这将允许您更新UI以添加/删除输入字段,而无需担心文件中捕获它们的顺序。
例如,您的文件格式可能是这样的:
Top Directory: <value>
LEF File: <value>
.
.
.
您必须仔细选择键(标签)和值之间的分隔符。
如果要在TCL中使用它,可以通过将数组存储在文件中来简化它。当您加载文件以填充UI中的条目时,这也会加速。例如,您的文件格式可能是这样的:
set inputFields("Top Directory") <value>
set inputFields("LEF File") <value>
答案 1 :(得分:0)
我通过以下代码实现了这一点,但并未进行非常优化。 首先,我保存一个带有变量值的输入文件,然后以相同的顺序读取它们。
proc save_input_entries {} {
global ENTRYfilename ENTRYfilename2 ENTRYfilename3 ENTRYfilename4 ENTRYfilename5 ENTRYfilename6 ENTRYfilename7 ENTRYfilename8 ENTRYfilename9 ENTRYfilename10 ENTRYfilename11 ENTRYfilename12 ENTRYfilename13 ENTRYfilename14 ENTRYfilename15 ENTRYfilename16 ENTRYfilename17 topdir corner_dir corner_name
set filename Input_entries.txt
set fileId [open $filename "w"]
puts $fileId $ENTRYfilename
puts $fileId $ENTRYfilename3
puts $fileId $ENTRYfilename4
puts $fileId $ENTRYfilename5
puts $fileId $ENTRYfilename7
puts $fileId $ENTRYfilename8
puts $fileId $ENTRYfilename15
puts $fileId $ENTRYfilename14
puts $fileId $ENTRYfilename16
puts $fileId $ENTRYfilename17
close $fileId
}
proc load_input_entries {} {
global ENTRYfilename ENTRYfilename2 ENTRYfilename3 ENTRYfilename4 ENTRYfilename5 ENTRYfilename6 ENTRYfilename7 ENTRYfilename8 ENTRYfilename9 ENTRYfilename10 ENTRYfilename11 ENTRYfilename12 ENTRYfilename13 ENTRYfilename14 ENTRYfilename15 ENTRYfilename16 ENTRYfilename17
set fp [open Input_entries.txt]
set stuff [read $fp]
set lines [split $stuff "\n"]
set ENTRYfilename [lindex $lines 0]
set ENTRYfilename3 [lindex $lines 1]
set ENTRYfilename4 [lindex $lines 2]
set ENTRYfilename5 [lindex $lines 3]
set ENTRYfilename7 [lindex $lines 4]
set ENTRYfilename8 [lindex $lines 5]
set ENTRYfilename15 [lindex $lines 6]
set ENTRYfilename14 [lindex $lines 7]
set ENTRYfilename16 [lindex $lines 8]
set ENTRYfilename17 [lindex $lines 9]
}