gpt4 book ai didi

tcl - 不区分大小写的文件版本存在命令

转载 作者:行者123 更新时间:2023-12-02 17:45:35 26 4
gpt4 key购买 nike

嗯,不知道在这方面该怎么做。不久前,我修改了一个 eggdrop 机器人的日志记录脚本。但现在出现了一个问题,由于某种原因,由于字符大小写问题,它正在将操作/文本记录在单独的文件中。 #channel.html 存在,#Channel.html 也存在,尽管前者是由于 channel 名称的当前状态而写入的(如果所有用户离开,它可能会更改)一个重新加入不同的案例)。

我已将这个问题缩小到我认为的问题所在。 文件存在于“filename_here”。我已经查看了 tcl 的文档,并且我已经阅读了有关混合大小写文件名的 wiki(当然,它将它们视为不同的文件),但我还没有找到这样的选项(或用户制作的过程)允许我要禁用此行为。

有什么办法/可以做到这一点吗?

最佳答案

它实际上取决于文件系统(即操作系统),如 file exists只是围绕操作系统的基本文件存在性测试的薄包装。经典的 Unix 文件系统大多区分大小写,而 Windows 文件系统通常不区分大小写。这意味着通常最好在编写代码时小心处理事物的大小写;你可能应该考虑使用 string tolower以预期的大小写获取 channel 名称(因为我认为 IRC channel 名称不区分大小写)。

但如果您不能这样做,您最好的办法就是获取不区分大小写匹配的文件名列表,并检查它是否是单个值。 las,这是一个困惑的操作glob没有 -nocase 选项(人们很少需要这样的东西),所以我们需要使用 string match -nocase帮忙:

set files [lmap f [glob *.html] {
expr {[string match -nocase ${channel}.html $f] ? $f : [continue]}
}]
if {[llength $files] == 1} {
set channel_file [lindex $files 0]
} else {
# Oh no! Ambiguity!
}

使用lmap来自 Tcl 8.6;早期版本的 Tcl 应该改用它:

set files {}
foreach f [glob *.html] {
if {[string match -nocase ${channel}.html $f]} {
lappend files $f
}
}
if {[llength $files] == 1} {
set channel_file [lindex $files 0]
} else {
# Oh no! Ambiguity!
}

关于tcl - 不区分大小写的文件版本存在命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15219241/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com