文件的基本操作看起来可能是这个样子:
set fp [open file_name] ; # 打开文件并获得句柄 gets $fp line ; # 读取文件一行,换行符已经被去除 set data [read $fp 256] ; # 读取指定字节长度的数据 close $fp ; # 关闭文件句柄
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 主要有两种用法。
### 读取所有数据直到文件末尾 set data [read $fp] ### 读取指定长度的字符 set data [read $fp 1024]
# 文件的每行为List的一个元素 proc file2list {file} { set rv [list ] set fp [open $file] while {[gets $fp line] >= 0} { lappend rv $line } return $rv }