`
hyw520110
  • 浏览: 219608 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Tcl/Tk--文件操作

    博客分类:
  • TCL
阅读更多

wikibook上的文章很有水平,特翻译出来,晒晒。

(译自wikibook,开放书籍库)

文件与通道
    Tcl除了具有C语言里面的stdio库的功能外,还提供很多其他的文件操作命令,很像shell脚本,虽然比较繁琐。见下面的例子:
    glob *.tcl
用来列出当前目录下的所有.tcl文件。
file copy /from/path/file.ext /to/path
.
file delete /from/path/file.ext
.
file rename before.txt after.txt
.
cd /an/other/directory
.
pwd
如果要临时更换目录,执行代码,可以这样:
set here [pwd]
cd $someotherdir
#... code here
cd $here

更准确的来说,一般很多文件操作工作都是用"通道"来实现的,如:
1、标准通道 (stdin, stdout, stderr)
2、打开的普通文件 (open ...)
3、管道命令 (|)
4、套接字 (TCP)

文件名
      通常,文件时用路径名来定位的,在Unix下,用"/"作为路径分隔符,而在Windows下是用"\",这往往给Tcl,乃至C语言,都带来了麻烦。因为在这两种语言里,"\"表示转义字符。如,\t是水平制表符,\n是换行符。幸运的是Windows也接受"/",所以,在Tcl和C里,你可以放心的用左斜杠"/"作为路径分隔符。但有些情况,你要注意一下转义序列
1、防止转义字符被解释的情况,如 \\
2、用花括号括起来的反斜杠路径路径名:{\foo\bar\grill.txt}
但Tc允许你在所有的情况用标准的分隔符"/",所有这样用你一般都比较安全的。Mac下就不行了,因为从MacOS开始,只接受冒号":"所为路径分隔符。
如果有必要的话,你可以这样来转换:
    % file normalize \\foo\\bar\\grill.txt
    C:/foo/bar/grill.txt
    % file nativename /foo/bar/grill.txt
    \foo\bar\grill.txt
还可以用 file join命令,如 file join arg1 arg2 ... argN,这时,Tcl会帮你考虑所有平台无关的细节,给你返回一个平台无关的路径。例如:
    set somepath [file join foo bar grill.txt]
    在Windows下将产生 foo/bar/grill.txt
   
输入输出

Tcl的输入输出命令几乎都非常接近C语言的stdio库里的命令(只不过去掉了开头的字符f):

set handle [open filename ?mode?]
set data [read $handle ?int?]
tell $handle
seek $handle offset ?from?
puts ?-nonewline? ?$handle? content
gets $handle ?varname?
close $handle
C里的printf命令的功能在Tcl里被分割成两个命令:
format,将数据转换成字符串(类似C的sprintf)
puts,输出结果为字符串,如:puts $handle [format "%05d %s" $number $text]

按行处理文本文件有两种方法,如果文件只有几个M,你可以一口气读完:
    set f [open $filename]
    foreach line [split [read $f] \n] {
    # work with $line here ...
    }
    close $f
文件稍大了,你只好一行一行的读,虽然相比之下,有点慢:
    set f [open $filename]
    while {[gets $f line] >= 0} {
    # work with $line here ...
    }
    close $f
最后,如果你想格式化你的文件,使之成为可以执行的Tcl代码,下面的命令最快
    source $filename
要touch一个文件,具体的说,如果文件不存在就新建,文件存在就更新其修改时间,可以这么做:
    proc touch name {close [open $name a]}

二进制文件
所有的文件都是由字节构成,字节又都是位,即二进制。文件的"二进制"是指那种字节可以是任何值的文件,而且行结束符(在DOS/Windows下,即是回车加换行)不被翻译过来。在Tcl里,可以很好的对二进制文件进行操作,只需要打开一个通道然后设置一下就行了:
    set fp [open tmp.jpg]
    fconfigure $fp -translation binary
    set content [read $fp]
    close $fp
运行上面的命令之后,变量content就存有文件的内容,每个字节都一样。
要检验一个文件是否是二进制文件,即是否存在空字节,可以这样,
    proc binary? filename {
   set f [open $filename]
   set data [read $f 1024]
   close $f
   expr {[string first \x00 $data]>=0}
    }
一些文件操作的命令:
很多有用的文件操作命令都集中在file命令下,file命令的第一个参数将告诉你要干什么

    * file atime name ?time?
    * file attributes name
    * file attributes name ?option?
    * file attributes name ?option value option value...?
    * file channels ?pattern? - returns the handles of currently open files
    * file copy ?-force? ?- -? source target
    * file copy ?-force? ?- -? source ?source ...? targetDir
    * file delete ?-force? ?- -? pathname ?pathname ... ?
    * file dirname name - e.g. [file dirname /foo/bar/grill.txt] -> /foo/bar
    * file executable name
    * file exists name
    * file extension name - e.g. [file extension /foo/bar/grill.txt] -> .txt
    * file isdirectory name
    * file isfile name
    * file join name ?name ...?
    * file link ?-linktype? linkName ?target?
    * file lstat name varName
    * file mkdir dir ?dir ...? - creates one or more directories (folders)
    * file mtime name ?time?
    * file nativename name
    * file normalize name
    * file owned name
    * file pathtype name
    * file readable name
    * file readlink name
    * file rename ?-force? ?- -? source target
    * file rename ?-force? ?- -? source ?source ...? targetDir
    * file rootname name - e.g. [file rootname /foo/bar/grill.txt] -> /foo/bar/grill
    * file separator ?name?
    * file size name
    * file split name - e.g [file split /foo/bar/grill.txt] -> {foo bar grill.txt}
    * file stat name varName
    * file system name
    * file tail name - e.g. [file tail /foo/bar/grill.txt] -> grill.txt
    * file type name
    * file volumes - Windows: returns your "drive letters", e.g {A:/ C:/}
    * file writable name

分享到:
评论

相关推荐

    TCL/TK 安装文件下载 windows/unix

    1. **跨平台**:TCL/TK 支持多种操作系统,包括Windows、Unix/Linux、Mac OS等,使得程序具有良好的可移植性。 2. **简单易学**:TCL语法简洁,易于理解和编写,适合初学者快速上手。 3. **集成图形化**:TK提供了...

    tcl/tk 8.5安装

    至于"TCLeditor"这个文件,它可能是用于编辑TCL脚本的文本编辑器或专用的TCL开发工具。为了更有效地编写和调试OpenSEES脚本,推荐使用支持TCL语法高亮和自动补全功能的编辑器,如Atom、Visual Studio Code等,并安装...

    Tcl/tk软件安装包

    Tcl的命令是面向过程的,而Tk提供了一系列的控件,如按钮、文本框、菜单等,可以方便地通过Tcl脚本来配置和操作。 安装ActiveTcl后,开发者可以获得完整的Tcl解释器和Tk库,能够编写并运行Tcl/tk程序。安装过程中,...

    Tcl/Tk Moni 串口通信

    `tclkit85.exe`可能是运行Tcl脚本的解释器,而`sdx.exe`和`sdx.kit`可能是扩展工具或库,用于增强Tcl/Tk的功能,比如动态加载插件或编译Tcl脚本为独立的可执行文件。 `makeApp.bat`和`makeApp.sh`通常用于自动化...

    tcltk-86-64.zip

    标题中的“tcltk-86-64.zip”表明这是一个与TCL/TK相关的压缩文件,适用于64位(x86-64)架构的计算机系统。TCL/TK是一个开源的脚本语言和图形用户界面(GUI)工具包,由John Ousterhout在1988年开发。它主要由两...

    Tcl/tk软件包

    BEAMnrc、DOSXYZnrc和BEAMDP这些程序是核医学领域的专业软件,它们借助Tcl/Tk为用户提供了图形化的操作界面,使得非程序员也能方便地设置参数和控制程序运行,大大降低了使用的门槛。 总的来说,Tcl/Tk是一个强大而...

    TCL-TK A Developer's Guide

    此外,书中还介绍了如何使用 TCL/Tk 进行网络编程、数据库访问和文件操作等高级主题。 《TCL-TK A Developer's Guide》还涵盖了 TCL/Tk 的高级主题,如多线程、事件驱动编程和图形化设计。作者通过详细的案例研究和...

    Tcl/Tk写的带界面的局域网聊天软件

    “Windows下可安装Active Tcl来执行”这一点强调了跨平台性,Tcl/Tk支持多种操作系统,Active Tcl使得在非Unix-like系统上使用Tcl/Tk变得简单。 “在多台电脑上运行,输入IP地址和要发送的信息,可实现电脑间互发...

    tcl-tk-reference-guide.pdf

    - 文件操作,如读写文件、重定向标准输入输出等。 - **History**:命令历史记录,允许用户通过上下箭头回溯之前输入的命令。 6. 正则表达式 - 支持基本和高级正则表达式模式匹配,用于文本搜索和替换。 7. 变量...

    使用tcl/tk写的个税计算器,内含源码,学习使用

    在TCL/Tk中,可以使用`entry`组件创建文本框供用户输入数据,用`button`组件触发计算操作,`label`组件显示计算结果。TCL脚本将处理这些输入,执行计算逻辑,并更新界面显示。 **压缩包文件内容** 在提供的压缩包...

    TCL_TK.rar_Tcl and tk_tcl_tcl/tk_tcl_tk_vmd tcl tk 文件

    - **自动化任务**:TCL/Tk常用于系统管理和脚本自动化,例如文件操作、网络通信等。 - **科学计算**:结合Tk的GUI,TCL可用于创建科学计算的可视化工具。 - **教育和教学**:由于其易于学习和强大的GUI功能,TCL/...

    tcl/tk开发工具

    Tk支持多种操作系统,包括Windows、Linux和Mac OS X等。 1. **控件丰富**:Tk包含按钮、文本框、列表框、滚动条、菜单等多种GUI控件。 2. **布局管理**:Tk使用grid、pack和place三种布局管理器,帮助开发者灵活地...

    高清版Tcl_Tk入门经典(第2版)

    本书首先介绍了Tcl的基础语法,包括变量、数据类型、流程控制结构、函数和文件操作等基本概念。这些基础知识对于理解和编写Tcl脚本至关重要。书中通过实例讲解,使读者能够快速上手,体验到Tcl语言的简洁与实用。 ...

    tcl.rar_.tcl_tcl_tcl tk_tcl/tk_tcl_tk

    例如,`string`命令用于处理字符串,`expr`用于执行数学表达式,`file`命令用于文件操作。 3. **TK组件**:TK提供了丰富的组件供开发者创建GUI,如按钮(`button`)、文本框(`entry`)、标签(`label`)、滚动条...

    tcl_tk.rar_tcl/tk_tcl_tk

    3. "TclTK.txt":这个文件可能是TCL/TK的教程、笔记或编程指南,提供了关于如何使用这两种技术的详细信息和示例。 4. "tk859-src.zip":这很可能是TK的一个特定版本(8.5.9)的源代码包,供开发者研究、编译或定制TK...

    Tcl / Tk 大全,Tcl教程.pdf

    Tcl/Tk的组合为程序员提供了一种轻量级、跨平台的解决方案,可以在多种操作系统上运行,包括Windows、Linux和macOS。 **Tcl语言核心概念** 1. **命令式语言**: Tcl是一种命令式语言,其语法简洁,主要通过命令来...

    tcl/tk 入门经典 第二版

    其语法简洁,以命令式风格为主,支持字符串处理、文件操作、进程控制等基本功能。学习Tcl时,应掌握变量、数据类型、控制结构(如if-else、for、while)、函数定义和调用等基础知识。 2. **Tk库介绍**:Tk是与Tcl...

    tcl80.dll tcl/tk语言支持库

    这个`tcl80.dll`文件是TCL 8.0版本的库文件,它包含了运行TCL/TK程序所必需的函数和数据结构。当一个TCL/TK程序启动时,操作系统会加载这个DLL来提供必要的功能支持。这些功能包括但不限于解析和执行TCL脚本、管理...

    Tcl.And.Tk.rar_tcl/tk

    这个名为“Tcl.And.Tk.rar”的压缩包包含了一个名为“Tcl.And.Tk.chm”的CHM(Compiled Help Manual)文件,这通常是一个编译过的帮助文档,提供了全面的Tcl/Tk教程和参考信息。 **Tcl语言基础** 1. **语法简明**:...

    Tcl/Tk编程语言大全

    - **字符串操作**:Tcl提供了丰富的字符串处理函数,如`string length`、`string index`等,可以方便地进行字符串的切割、查找、替换等操作。 6. **Tk工具箱** - Tk工具箱包含了一系列的GUI组件,如`button`、`...

Global site tag (gtag.js) - Google Analytics