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

  • 相关阅读:
    JAVA中线程同步的方法(4种)汇总
    java
    指定的元素已经是另一个元素的逻辑子元素。请先将其断开连接。(解决问题总结)
    无法将类型为“System.Windows.Controls.SelectedItemCollection”的对象强制转换为类型“System.Collections.Generic.IList`1
    foreach---集合已修改;可能无法执行枚举操作。
    WPF_View中控件使用单例ViewModel
    判断s2是否能够被通过s1做循环移位(rotate)得到的字符串是否包含
    多列转1列 SqlServer 实现oracle10g的 wmsys.wm_concat()--for xml path('')
    异步对象(XMLHttpRequest)的帮助脚本
    在vs2010使用EF出现CS0012: 类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义
  • 原文地址:https://www.cnblogs.com/opencascade/p/4231629.html
Copyright © 2020-2023  润新知