2010-11-15 3 views
1

Я никогда не использовал Tcl ранее, однако мне нужно изменить определенный файл для проекта. Я использовал regex с Perl, однако я не уверен в синтаксисе с Tcl.Regex найти файл в Tcl

Что я хочу сделать, это позволить пользователю выполнить сценарий и ввести имя файла, которое необходимо выполнить. Я хочу найти файл после его обнаружения и сделать что-то. До сих пор вот мой несколько псевдокод.

set file_name [lindex $argv 0] 

while(true) { 
if { found file } { 
puts "Found file!" 
{ 
else { file not found) 
puts "File not found!" 

} 

Я не уверен, как проверить, найден ли файл или нет? Я получаю полное имя файла от пользователя через вход ...

+0

Что вы подразумеваете под словом "once its found"? Вы хотите зацикливаться до появления файла? Нужно ли вам перебирать подкаталоги до тех пор, пока они не совпадут? –

+0

Карлос, извините за недостаток информации. Я имел в виду, что он был найден в корневом каталоге. – c0d3rs

+0

Я знаю из http://stackoverflow.com/q/4187684/301832, что вы извлекаете список файлов из удаленного места, поэтому решения, связанные с локальной файловой системой, не являются лучшей рекомендацией здесь. ** Но вы должны были сказать это в своем вопросе! ** –

ответ

4

Если вы действительно хотите использовать регулярные выражения вместо шаблонов Глоб затем периодически получить список файлов (с помощью glob) и поиск по ним , Услужливо, lsearch принимает регулярное выражение синтаксис:

# get the regexp: 
set file_pattern [lindex $argv 0] 

# scan current directory: 
while 1 { 
    set files [glob -nocomplain *] 
    if {[lsearch -regexp $files $file_pattern] < 0} { 
     puts "file not found" 
    } else { 
     puts "file found" 
    } 
    after 1000 ;# sleep for 1 second 
} 

Обратите внимание, что в Tcl регулярное выражение не имеет специальный синтаксис. Это просто строка.

+0

спасибо slebetman ... это дало мне хорошее начало ... – c0d3rs

3

Ожидаете ли вы, что пользователь вводит определенное имя файла или что-то в виде подстановочных знаков с оболочкой? Если последнее, вы захотите использовать команду glob.

Другие могут предложить лучшие методы каталог опроса, но возможно:

# a utility procedure for outputting messages 
proc log {msg} {puts "[clock format [clock seconds] -format %T] - $msg"} 

set file_pattern [lindex $argv 0] 
log "looking for $file_pattern" 
while {[llength [glob -nocomplain $file_pattern]] == 0} { 
    after 30000 ;# sleep for 30 seconds 
    log "still waiting" 
} 
log "found: [join [glob $file_pattern] ,]" 
Смежные вопросы