文件的基本操作看起来可能是这个样子:
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
}