使用TCL比较两个单列文件的列内容并输出差异
TCL实现两个单列文件的内容对比检查
我来帮你搞定这个文件内容对比的需求,下面是完整的可运行代码,以及详细的步骤解释:
完整代码
# 读取file1.txt内容并存储到字典(用作集合) set f1_handle [open "file1.txt" r] set file1_items [dict create] while {[gets $f1_handle line] >= 0} { set cleaned_line [string trim $line] # 跳过空行,避免无效数据干扰 if {$cleaned_line ne ""} { dict set file1_items $cleaned_line 1 } } close $f1_handle # 读取file2.txt内容并存储到字典 set f2_handle [open "file2.txt" r] set file2_items [dict create] while {[gets $f2_handle line] >= 0} { set cleaned_line [string trim $line] if {$cleaned_line ne ""} { dict set file2_items $cleaned_line 1 } } close $f2_handle # 筛选同时存在于两个文件的项 set common_items [list] foreach item [dict keys $file1_items] { if {[dict exists $file2_items $item]} { lappend common_items $item } } # 筛选仅存在于file1.txt的项 set only_file1_items [list] foreach item [dict keys $file1_items] { if {![dict exists $file2_items $item]} { lappend only_file1_items $item } } # 按照要求格式输出结果 puts "\"[join $common_items ", "]\" 同时存在于两个文件中" puts "[join $only_file1_items ", "]仅存在于file1.txt中"
代码解释
- 文件读取与存储:用字典(
dict)来存储每个文件的内容,字典的键是文件里的每一项,值设为1即可。这样做的好处是可以快速检查某一项是否存在,而且自动去重(如果文件里有重复项的话)。 - 内容清洗:用
string trim去除每行的换行符、首尾空格,同时跳过空行,避免无效数据影响结果。 - 对比逻辑:遍历file1的所有项,分别检查是否存在于file2的字典中,从而区分出共同项和仅属于file1的项。
- 结果输出:用
join命令把列表转换成逗号分隔的字符串,完全符合你需要的输出格式。
运行这段代码后,会输出:
"Tom, Harry, Edward" 同时存在于两个文件中
Snowy仅存在于file1.txt中
内容的提问来源于stack exchange,提问作者Neel
相关产品推荐
相关产品推荐

