Iterate Files by Tcltk

简介: Iterate Files by Tcltk eryar@163.com Abstract. Tcl/Tk provide a programming system for developing and using graphical user interface(GUI) applications.

Iterate Files by Tcltk

eryar@163.com

Abstract. Tcl/Tk provide a programming system for developing and using graphical user interface(GUI) applications. Tcl stands for “tool command language” and is pronounced “tickle”, is a simple scripting language for controlling the extending applications. The blog use Tcl/Tk to iterate all the files for a given directory, this is useful to some automation work, such as change all the file names for a given directory; add copyright info for the source code files.

Key Words. Tcl/Tk, Iterate Files,遍历文件夹中所有文件

1. Introduction

Tcl/Tk是一种用于易于使用的脚本语言,可以用来对程序进行扩展及完成一些自动化的工作,加上内置的一些命令,其功能要比Windows中的DOS的批处理命令功能更强大,使用更方便。Tcl脚本语言是开源免费的,可以方便获取且免费使用。

OpenCASCADE中使用了Tcl/Tk来实现了一个自动化测试体系。使用在OpenCASCADE中使用自定义的Tcl命令,可以快速来检验算法的结果。通过编写脚本文件,实现了测试的自动化。所以学习一下Tcl/Tk脚本语言,并在实际的工作中加以应用,可以将一些机械的劳动交给计算机自动完成。

本文主要说明如何使用Tcl/Tk来遍历指定文件夹中所有文件。利用此功能,可以稍微加以扩展,就可以完成一些实际的重复劳动。如遍历指定目录中所有的源文件或指定类型的文件,添加上版权信息等。

2. Tcl/Tk Code

要遍历指定目录下所有的文件,包括子文件夹,需要用到命令glob及一个递归函数。脚本代码如下所示:

#
# Tcl/Tk script to iterate all the files for a given directory.
# eryar@163.com
# 2015-01-18
#


package   require  Tcl
package   require  Tk

wm title 
.   " Iterate Files "

label 
. labelDirectory  - text  " Directory  "
entry 
. entryDirectory  - width  30   - relief sunken  - textvariable aDirectory
button 
. buttonDirectory  - text  " "   - command {chooseDirectory  . entryDirectory}

button 
. buttonApply  - text  " Apply "   - command {perform  $aDirectory }
button 
. buttonCancel  - text  " Cancel "   - command { exit }

grid 
. labelDirectory  . entryDirectory  . buttonDirectory
grid 
. buttonApply  . buttonCancel

#  chooseDirectory--
# choose the directory to iterate.

proc chooseDirectory {theEntry} {
    set dir [tk_chooseDirectory 
- initialdir [pwd]  - mustexist  1 ]
    
    
if  {[string compare  $dir   "" ]} {
        
$theEntry   delete   0  end
        
$theEntry  insert  0   $dir
        
$theEntry  xview end
    }
}

#  perform--
# perform the algorithm.
#

proc perform {theDirectory} {
    puts 
" Iterate all the files in $theDirectory "
    
    
if  {[string  length   $theDirectory <   1 } {
        tk_messageBox 
- type ok  - icon warning  - message  " Please select the directory! "   - parent  .
        
return  
    }
    
    
#  process the iterate
    process  $theDirectory
}

#  process--
# recursion every folder and file.
#

proc process {theFolder} {

    set aFiles [
glob   - nocomplain  - directory  $theFolder   * ]
    
    
foreach  aFile  $aFiles  {
        
if  {[file isfile  $aFile ]} {
            
#  just output the file name here. 
            # you can do something such as rename for the file.

            puts  " $aFile \n "
        } 
else  {
            process 
$aFile
        }
    }
}

程序用法为打开Tcl解释器,使用命令source加载脚本文件,如下图所示:

wps_clip_image-20196

Figure 2.1 Tcl usage

3. Conclusion

通过应用Tcl/Tk来体验脚本编程的乐趣,并加深对Tcl/Tk的理解。从而对OpenCASCADE的模块Draw Test Harness更好地理解。

如果有编程基础,Tcl/Tk会很快入门的。入门后,可以应用其直接编写一些有意思有脚本,来实现一些重复工作的自动化。也可将Tcl加入到自己的程序中,增加程序的二次开发功能。

可见,玩一玩脚本语言,还是非常有趣的!


PDF Version and Script: Iterate Files by Tcl

目录
相关文章
|
5月前
|
缓存 JavaScript
Error: EPERM: operation not permitted, mkdir ‘C:\Program Files\nodejs‘TypeError: Cannot read proper
Error: EPERM: operation not permitted, mkdir ‘C:\Program Files\nodejs‘TypeError: Cannot read proper
53 0
error: Your local changes to the following files would be overwritten by merge
error: Your local changes to the following files would be overwritten by merge
|
NoSQL MongoDB 数据库
DeprecationWarning: count is deprecated. Use Collection.count_documents instead
当我使用pymongo查询出对应的cursor(find出的document的迭代器),然后查看查询出数据的数量时使用如下代码: ```python db = MongoClient(host='192.168.1.3', port=27017) # dbname为操作的数据库名称,collectionname为操作的集合名称
257 0
find: missing argument to `-exec‘ 已解决
find: missing argument to `-exec‘ 已解决
585 0
find: missing argument to `-exec‘ 已解决
find: missing argument to `-exec&#39;
今天使用find命令查找删除文件时,遇到下面错误,这个是因为在{}和\之间必须要有空格,否则会报上面的错。 以前都没有注意到这个细节,特此记录一下。   [root@DB-Server full]#  find  .
1338 0
|
JavaScript Windows 移动开发