通过读取文本文件查找行索引和单词索引
To find line index and word index by reading a text file
我刚开始学习 Tcl,有人可以帮助我如何通过使用 Tcl 读取文本文件来查找特定单词的行索引和单词索引。
谢谢
如评论中所述,您可以使用许多基本命令来解决问题。要将文件读入行列表,您可以使用 open
、split
、read
和 close
命令,如下所示:
set file_name "x.txt"
# Open a file in a read mode
set handle [open $file_name r]
# Create a list of lines
set lines [split [read $handle] "\n"]
close $handle
通过使用 for
循环、incr
和一组与列表相关的命令,如 llength
、[=19=,可以实现在行列表中查找特定单词] 和 lsearch
。 Tcl 中的每个字符串都可以作为一个列表来解释和处理。实现可能如下所示:
# Searching for a word "word"
set neddle "word"
set w -1
# For each line (you can use `foreach` command here)
for {set l 0} {$l < [llength $lines]} {incr l} {
# Treat a line as a list and search for a word
if {[set w [lsearch [lindex $lines $l] $neddle]] != -1} {
# Exit the loop if you found the word
break
}
}
if {$w != -1} {
puts "Word '$neddle' found. Line index is $l. Word index is $w."
} else {
puts "Word '$neddle' not found."
}
在这里,脚本遍历行并在每一行中搜索给定的单词,就像它是一个列表一样。默认情况下,对字符串执行列表命令会将其拆分为 space。当在一行中找到一个单词时循环停止(当 lsearch
returns 非负索引时)。
另请注意,列表命令将多个 space 视为单个分隔符。在这种情况下,这似乎是一种理想的行为。在带有双 space 的字符串上使用 split
命令会有效地创建一个 "zero length word",这可能会产生不正确的单词索引。
我刚开始学习 Tcl,有人可以帮助我如何通过使用 Tcl 读取文本文件来查找特定单词的行索引和单词索引。
谢谢
如评论中所述,您可以使用许多基本命令来解决问题。要将文件读入行列表,您可以使用 open
、split
、read
和 close
命令,如下所示:
set file_name "x.txt"
# Open a file in a read mode
set handle [open $file_name r]
# Create a list of lines
set lines [split [read $handle] "\n"]
close $handle
通过使用 for
循环、incr
和一组与列表相关的命令,如 llength
、[=19=,可以实现在行列表中查找特定单词] 和 lsearch
。 Tcl 中的每个字符串都可以作为一个列表来解释和处理。实现可能如下所示:
# Searching for a word "word"
set neddle "word"
set w -1
# For each line (you can use `foreach` command here)
for {set l 0} {$l < [llength $lines]} {incr l} {
# Treat a line as a list and search for a word
if {[set w [lsearch [lindex $lines $l] $neddle]] != -1} {
# Exit the loop if you found the word
break
}
}
if {$w != -1} {
puts "Word '$neddle' found. Line index is $l. Word index is $w."
} else {
puts "Word '$neddle' not found."
}
在这里,脚本遍历行并在每一行中搜索给定的单词,就像它是一个列表一样。默认情况下,对字符串执行列表命令会将其拆分为 space。当在一行中找到一个单词时循环停止(当 lsearch
returns 非负索引时)。
另请注意,列表命令将多个 space 视为单个分隔符。在这种情况下,这似乎是一种理想的行为。在带有双 space 的字符串上使用 split
命令会有效地创建一个 "zero length word",这可能会产生不正确的单词索引。