一会儿里面找到下一行的ip
Find a ip next line inside a while
在 "while" 中,我需要在 lindex 位置 1 的下一行中验证我在这一轮是否有相同的 ip。
如果是,就做某事,如果不是,就做另一件事。
ips.txt
169.254.0.1,169.254.1.1
169.254.0.2,169.254.1.1
169.254.0.3,169.254.1.2
169.254.0.4,169.254.1.2
我如何使用 tcl 执行此操作?
谢谢。
有点简单,但应该能胜任:
set ch [open ips.txt]
set prev {}
while {[chan gets $ch ips] >= 0} {
lassign [split $ips ,] ipa ipb
if {$prev ne {}} {
if {$prev eq $ipb} {
# do something
} else {
# do another thing
}
} else {
# do something with the first line
}
set prev $ipb
}
chan close $ch
由内而外:基于 prev
中的值(上一行的第二个 ip 地址,如果我们正在读取第一行,则为空字符串)和 ipb
(当前行的第二个 ip 地址)是否相等,执行 "something" 或 "another thing"。该行中的两个 ip 地址都可以作为 ipa
和 ipb
.
的值进行处理
为了确保我们只在有有效地址进行比较时才这样做(请注意,这使您可以选择将 prev
预设为默认值),此比较包含在$prev
和空字符串。
在每一行上,在比较任何内容之前,将该行分成两个地址并将它们存储在ipa
和ipb
中。比较后,将ibp
的值复制到prev
,以供处理下一行时使用。
读取并处理文件中的所有行。
如果无法打开文件进行读取,此脚本将引发错误异常。文件中格式错误的行不应引起问题,但可能会将 ipb
设置为空字符串。
在 "while" 中,我需要在 lindex 位置 1 的下一行中验证我在这一轮是否有相同的 ip。
如果是,就做某事,如果不是,就做另一件事。
ips.txt
169.254.0.1,169.254.1.1
169.254.0.2,169.254.1.1
169.254.0.3,169.254.1.2
169.254.0.4,169.254.1.2
我如何使用 tcl 执行此操作?
谢谢。
有点简单,但应该能胜任:
set ch [open ips.txt]
set prev {}
while {[chan gets $ch ips] >= 0} {
lassign [split $ips ,] ipa ipb
if {$prev ne {}} {
if {$prev eq $ipb} {
# do something
} else {
# do another thing
}
} else {
# do something with the first line
}
set prev $ipb
}
chan close $ch
由内而外:基于 prev
中的值(上一行的第二个 ip 地址,如果我们正在读取第一行,则为空字符串)和 ipb
(当前行的第二个 ip 地址)是否相等,执行 "something" 或 "another thing"。该行中的两个 ip 地址都可以作为 ipa
和 ipb
.
为了确保我们只在有有效地址进行比较时才这样做(请注意,这使您可以选择将 prev
预设为默认值),此比较包含在$prev
和空字符串。
在每一行上,在比较任何内容之前,将该行分成两个地址并将它们存储在ipa
和ipb
中。比较后,将ibp
的值复制到prev
,以供处理下一行时使用。
读取并处理文件中的所有行。
如果无法打开文件进行读取,此脚本将引发错误异常。文件中格式错误的行不应引起问题,但可能会将 ipb
设置为空字符串。