Tcl/Tk Insight: 文件 IO

@ 2009-06-30 11:31:19
标签:
    «目录»

    文件的基本操作看起来可能是这个样子:

    set fp [open file_name]  ; # 打开文件并获得句柄
    gets $fp line            ; # 读取文件一行,换行符已经被去除
    set data [read $fp 256]  ; # 读取指定字节长度的数据 
    close $fp                ; # 关闭文件句柄
    

    文件IO相关的命令

    • open 打开文件
    • close 关闭文件
    • gets 按行读取数据
    • read 按块读取数据
    • puts 写入数据
    • tell 获得文件指针的当前位置
    • seek 设置文件指针的位置
    • eof 判断文件指针是否到大文件末尾
    • fconfigure 配置文件句柄
    • flush 清空缓冲区
    • fcopy 在文件句柄间复制数据

    gets

    gets 按行读取数据,并自动去除换行符。

    gets 有两种用法。第一种用法返回读到的字节数,第二种用法返回读到的内容。返回字节数的情况下,返回值-1表示到了文件末尾或者没有足够数据可以读(非阻塞模式下)。返回行内容的情况下,不能通过返回值区分空行和文件结束,因此需要借助 eof 或者 blocked

    ### 1. 第一种用法
    set count [gets $fp line]
    
    while {[gets $fp line] >= 0} {
        # 处理该行内容
    }
    
    
    ### 1. 第二种用法
    set line [gets $fp]
    
    while {![eof $fp]} { 
        # eof 返回值 1=文件结束 0=没有结束
        set line [gets $fp]
    }
    

    read

    read 主要有两种用法。

    ### 读取所有数据直到文件末尾
    set data [read $fp]
    
    ### 读取指定长度的字符
    set data [read $fp 1024] 
    

    代码示例

    读取文件为List

    # 文件的每行为List的一个元素
    
    proc file2list {file} {
        set rv [list ]
        set fp [open $file]
        while {[gets $fp line] >= 0} {
            lappend rv $line
        }
        return $rv
    }
    
    标签:

      分享到:
      comments powered by Disqus

      28/31ms