В Tcl вы загружаете файл шаблонов и используете их для фильтрации.Вероятно, проще всего поддерживать основной поток фильтрации, переходящий от стандартного ввода к стандартному выводу;Вы можете легко перенаправить их из / в файлы.Поскольку вы, похоже, хотите использовать «is pattern is substring of» в качестве правила сопоставления, вы можете сделать это с помощью string first
, что приведет к следующему коду:
# Load in the patterns from the file named by the first argument
set f [open [lindex $argv 0]]
set patterns [split [string trimright [read $f] \n] \n]
close $f
# Factor out the actual matching
proc matches {theString} {
global patterns
foreach pat $patterns {
# Change the next line to use other matching rules
if {[string first $pat $theString] >= 0} {
return true
}
}
return false
}
# Read all input lines and print all non-matching lines
while {[gets stdin line] >= 0} {
if {![match $line]} {
puts $line
}
}
Я считаю полезным выделитьпроцедуры с такими ключевыми битами, как «соответствует ли эта строка любому из моих шаблонов?». Вы, вероятно, назвали бы приведенный выше код примерно так:
tclsh doFiltering.tcl patterns.txt <input.txt >output.txt