谁可以将其拆分为变量?名称和年份 dirname和year设置为新变量
来自: !name England.london.2016.Camcorder.mkv
要: dirname England.london 2016年
来自: !name England.london.welsh.2016.Canon.jpg
要: dirname England.london.welsh 2016年
来自: !名字Finnland.Helsinki.1999.Samsung.iphone.jpg
要: dirname Finnland.Helsinki 1999年
来自: !名字Finnland.1999.Camcorder.mkv
要: dnname Finnland 1999年
bind pub "-|-" !name dirs
proc dirs { nick uhost hand chan text} {
set name [lindex $text 0]
putnow "PRIVMSG $chan :dirname $dirname year $year"
}
答案 0 :(得分:1)
% #The format reference used is as follows,
% # 'anytexthere.year.fewmoretexthere'
% proc parse_info {input} {
set dirname {}
set year {}
regexp {^(.*)\.(\d{4})\..*$} $input match dirname year
return [list $dirname $year]
}
%
% parse_info England.london.2016.Camcorder.mkv
England.london 2016
% parse_info incorrect.film_without.correct-format.mkv
{} {}
% parse_info England.london.welsh.2016.Canon.jpg
England.london.welsh 2016
% parse_info Finnland.Helsinki.1999.Samsung.iphone.jpg
Finnland.Helsinki 1999
% #film name containing numbers in it
% parse_info 1408.2007.Canon.mkv
1408 2007
%
答案 1 :(得分:0)
set data {
England.london.2016.Camcorder.mkv
England.london.welsh.2016.Canon.jpg
Finnland.Helsinki.1999.Samsung.iphone.jpg
Finnland.1999.Camcorder.mkv
}
foreach line [split [string trim $data] \n] {
set dirname {}
foreach word [split [string trim $line] .] {
if {[string is digit -strict $word]} {
break
} else {
lappend dirname $word
}
}
puts "dirname [join $dirname .] year $word"
}
这个将数据分成行,将行分成单词。对于每一行,它会收集dirname的单词,直到它找到一个除了数字之外没有任何内容的单词,然后打印出它的内容。
另一种方法是,将正则表达式与每一行匹配:
foreach {- dirname year} [regexp -all -inline -line {^\s*([^\d]*)(\d{4})} $data] {
puts "dirname [string trimright $dirname .] year $year"
}
文档: break, foreach, if, join, lappend, puts, regexp, set, split, string, Syntax of Tcl regular expressions