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. 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加载脚本文件,如下图所示:

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

时间: 2024-09-21 22:52:04

Iterate Files by Tcltk的相关文章

OpenCASCADE Outline

OpenCASCADE Outline eryar@163.com      有网友反映blog中关于OpenCASCADE的文章比较杂乱,不太好找,最好能提供一个大纲,这样方便查找.于是决定将这些学习时写的文章整理下,方便对OpenCASCADE的学习理解.其实在http://www.cnblogs.com/opencascade中,已经将文章按目录重新发表了一遍.可以按OpenCASCADE的模块的顺序来学习,也可以挑选自己感兴趣的部分来学习.      由于本人水平所限,文中的错误不妥之处

Read Excel files from Python[转]

http://scienceoss.com/read-excel-files-from-python/     Use the excellent xlrd package, which works on any platform. That means you can read Excel files from Python in Linux! Example usage: Open the workbook import xlrd wb = xlrd.open_workbook('mywor

Files 集合

集合   一个文件夹中所有 File 对象的集合. 说明 下面这个例子说明了如何获得一个 Files 集合以及如何使用 Enumerator 对象和 for 语句来遍历该集合: function ShowFolderFileList(folderspec){   var fso, f, f1, fc, s;   fso = new ActiveXObject("Scripting.FileSystemObject");   f = fso.GetFolder(folderspec); 

Files 属性

  返回一个 Files 集合,由指定文件夹中包含的所有 File 对象组成,包括设置了隐藏和系统文件属性的文件. object.Files object 应为 Folder 对象. 说明 下面的代码说明了 Files 属性的用法: function ShowFolderFileList(folderspec){   var fso, f, fc, s;   fso = new ActiveXObject("Scripting.FileSystemObject");   f = fso

J2EE deployment files (ejb-jar.xml)

j2ee|xml <ejb-jar> The ejb-jar element is the root element of the EJB deployment descriptor. It contains an optional description of the ejb-jar file, optional display name, optional small icon file name, optional large icon file name, mandatory stru

J2EE deployment files(ejb-jar2.0.xml)

j2ee|xml <ejb-jar> The ejb-jar element is the root element of the EJB deployment descriptor. It contains an optional description of the ejb-jar file, optional display name, optional small icon file name, optional large icon file name, mandatory stru

J2EE deployment files(web.xml)

j2ee|web|xml <web-app> This file contains the configuration for a web-application. <icon> The icon element contains a small-icon and a large-icon element which specify the location within the web application for a small and large image used to

MySQL数据导入导出方法与工具介绍(2-import from sql files)

mysql|数据    MySQL数据导入导出方法与工具介绍(2-import from sql files)          批处理导入文件,从sql文件导入数据到数据库中 翻译声明:    本文内容来自Sam's Teach Yourself MySQL in 21 Days一书的部分内容,by Mark Maslakowski    英文原文版权属原作者所有,中文的部分翻译有略有增删;原书讲的过于清楚的地方有删,讲的不清楚的地方有增:如果有翻译的不妥或者不正确的地方,请指正. 翻译者:D

VB/Script 怎样读取一个目录下的所有文件名到数组? VB用dir,VBScript用files集合

vbscript|集合|数组|文件名 Example:VBfilename=dir("c:\*.*")i = 0do while filename = "" array1 (i)=filename i = i + 1 filename = dir("c:\*.*")loopVB好象也有比较好的方法,但是我不太清楚了VBScriptSet fs = CreateObject("Scripting.FileSystemObject"