file exists
これは、OSの基本的なファイル存在テストの単なる薄いラッパーであるため、実際にはファイルシステム(つまりOS)に依存します。従来のUnixファイルシステムではほとんどの場合大文字と小文字が区別されますが、Windowsファイルシステムでは通常大文字と小文字が区別されません。これは、通常、物事のケースの処理に注意するようにコードを作成するのが最善であることを意味します。予想されるケースでチャネル名を取得するために使用することを検討するstring tolower
必要があります(IRCチャネル名では大文字と小文字が区別されないと思うため)。
ただし、それができない場合は、大文字と小文字を区別せずに一致するファイル名のリストを取得し、それが単一の値であるかどうかを確認するのが最善の方法です。残念ながら、これはオプション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
Tcl8.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!
}