Tcl 如何搜索列表';每个元素在文件中是否存在

Tcl 如何搜索列表';每个元素在文件中是否存在,tcl,Tcl,如何使用TCL组织一个循环,搜索列表中文件或其他列表中存在的每个元素,如果不存在,则返回不匹配的元素。如果要检查的内容数量明显小于文件中的行数/标记数,最好使用关联数组的功能进行检查,因为这可以通过线性扫描完成(关联数组速度很快) 然后,我们需要做的就是使用一个小的标准节从文件中获取行/令牌,并通过检查器运行它们。假设我们处理的是线路: proc getFileLines {filename} { set f [open $filename] set data [read $f]

如何使用TCL组织一个循环,搜索列表中文件或其他列表中存在的每个元素,如果不存在,则返回不匹配的元素。

如果要检查的内容数量明显小于文件中的行数/标记数,最好使用关联数组的功能进行检查,因为这可以通过线性扫描完成(关联数组速度很快)

然后,我们需要做的就是使用一个小的标准节从文件中获取行/令牌,并通过检查器运行它们。假设我们处理的是线路:

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]