2016-09-27 5 views
2

これを変数に分割できますか?から DIRNAME England.london 2016年split dirname year

:から新しい変数

に設定の名前と年 dirnameの年のために:! 名England.london.2016.Camcorder.mkv

へ:! 名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

へ: のdirname 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" 
} 

答えて

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 
% 
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" 
} 

ドキュメント: breakforeachifjoinlappendputsregexpsetsplit各行に対して正規表現に一致

別の方法として、 、 string, Syntax of Tcl regular expressions