Tcl 如何搜索列表';每个元素在文件中是否存在
如何使用TCL组织一个循环,搜索列表中文件或其他列表中存在的每个元素,如果不存在,则返回不匹配的元素。如果要检查的内容数量明显小于文件中的行数/标记数,最好使用关联数组的功能进行检查,因为这可以通过线性扫描完成(关联数组速度很快) 然后,我们需要做的就是使用一个小的标准节从文件中获取行/令牌,并通过检查器运行它们。假设我们处理的是线路:Tcl 如何搜索列表';每个元素在文件中是否存在,tcl,Tcl,如何使用TCL组织一个循环,搜索列表中文件或其他列表中存在的每个元素,如果不存在,则返回不匹配的元素。如果要检查的内容数量明显小于文件中的行数/标记数,最好使用关联数组的功能进行检查,因为这可以通过线性扫描完成(关联数组速度很快) 然后,我们需要做的就是使用一个小的标准节从文件中获取行/令牌,并通过检查器运行它们。假设我们处理的是线路: proc getFileLines {filename} { set f [open $filename] set data [read $f]
proc getFileLines {filename} {
set f [open $filename]
set data [read $f]
close $f
return [split $data "\n"]
}
set shortList [getFileLines file1.txt]
set longList [getFileLines file2.txt]
if {[checkForAllPresent $shortList $longList]} {
puts "All were there"
} else {
puts "Some were absent"
}
返回缺失行列表(使用return[array names t]
)可能比返回是否所有内容都缺失(使用llength
执行“is everything”的常规检查)更好,因为这会提供更有用的信息。(通过更多的工作,您可以生成更多关于当前内容的信息,但这需要编写更多的代码,使事情变得不那么清楚。)
(搜索时,请注意行上的前导空格和尾随空格很重要。此处完全匹配。或者使用string trim
)
使用文字而不是线条也同样简单。您只需要使用稍微不同的代码从文件的读入内容中提取标记
return [regexp -all -inline {\w+} $data]
其他一切都一样。你能澄清一下你的问题吗?我不明白你想干什么。有什么例子吗?我有两个文件:file1,file2。file1的长度
return [regexp -all -inline {\w+} $data]