文档章节

Iterate Files by Tcltk

eryar
 eryar
发布于 2015/01/18 17:09
字数 778
阅读 28
收藏 0

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

© 著作权归作者所有

eryar
粉丝 22
博文 127
码字总数 227012
作品 0
武汉
私信 提问
编译python的时候遇到错误

环境是centOS7.5x64,python3.7.0,当使用make命令的时候报以下错误 Failed to build these modules: _uuid 具体的是 /root/python3/Python-3.7.0/Modules/_uuidmodule.c:15:5: error: unkn......

綵se亱晚
2018/07/01
1K
1
Tcl/Tk 8.6.5 发布,常用于信息产业领域的编程语言

Tcl/Tk 8.6.5 发布了,Tcl/Tk 是一种简明,高效,可移植性好的编程语言。在信息产业领域具有广泛的应用。 Tcl/Tk 的发明人 John Ousterhout 教授在八十年代初,是伯克利大学的教授。在其教学...

MikeManilone
2016/03/05
3.1K
10
Terraform 迁移工具 - Terraformer

Terraformer 是一个命令行工具,用于从已有的基础设施中生成 tf 和 tfstate 文件( Terraform 的反向工具) 声明:这是 Google 官方产品 状态: beta - 还需要进一步完善文档和修复 bug 等 作...

匿名
05/06
163
0
Python中yield的理解和用法

【简单总结】 generator(生成器) 是一次性的iterator(迭代器,例如:list、string、files),但只能遍历迭代一次。好处是,只在迭代(调用)的时候占用临时内存,每一次迭代完成之后,下一...

Goopand
01/18
17
0
Ruby 1.9安装tcltk绑定

这两天想玩一玩ruby,安装ruby后发现gui开发需要额外绑定tcl/tk(这点确实没有python方便)。 晚上查了很多资料,安装activetcl等等,都不好用。 其实是有一个捷径可以选择的,在gem中搜索:...

hyper0x
2012/02/27
164
0

没有更多内容

加载失败,请刷新页面

加载更多

Vue warn]: Computed property "activeNames" was assigned to but it has no setter.

在使用 vue,element-ui时,如下代码 <template> <el-form :model="numberValidateForm" ref="numberValidateForm"> <el-form-item> <el-tabs v-model="activeNames" @tab-cl......

牧云橙
13分钟前
2
0
重构-改善既有代码的设计-6.2内联函数

6.2内联函数 动机 本书经常以简短的函数表现动作意图,这样会使代码更清晰易读。但有时候你会遇到某些函数,其内部代码和函数名称同样清晰易读。也可能你充够了该函数的内部实现,使其内容和...

还仙
14分钟前
2
0
Less 混入

混合类似于编程语言中的函数。 Mixins 是一组CSS属性,允许我们将一个类的属性嵌套于另一个类,被嵌入的类可以看作是变量,并且包含类名作为其属性,也就是说我们可以用一个类定义样式然后把...

凌兮洛
17分钟前
3
0
频繁FGC的真凶原来是它

频繁FGC的真凶原来是它 上周排查了一个线上问题,主要现象是CPU占用过高,jvm old区占用过高,同时频繁fgc,我简单排查了下就草草收场了,但是过后我对这个问题又进行了复查,发现问题没有那...

每天晒白牙
17分钟前
3
0
简单的树形菜单如何写

业务需求 数据结构中含有图片、名称、children的树形结构,需要展示出每一级的图片名称和图片,找了些树形图的插件,都没有展示大的图片的,一般都是小图标,就自己试着写一个包含图的简单的...

tianyawhl
19分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部