Tcl 将大文件拆分为小文件
如何使用Tcl将一个大文件拆分为n个小文件?必须通过命令行指定要拆分的文件名和要创建的文件数。以下是我到目前为止的情况:Tcl 将大文件拆分为小文件,tcl,Tcl,如何使用Tcl将一个大文件拆分为n个小文件?必须通过命令行指定要拆分的文件名和要创建的文件数。以下是我到目前为止的情况: proc splitter { file no } { set lnum 0 set file_open [open $file r] while {[gets $file_open line] >= 0 } { incr lnum } puts "$lnum" set num [expr $lnum/$no] close $file
proc splitter { file no } {
set lnum 0
set file_open [open $file r]
while {[gets $file_open line] >= 0 } {
incr lnum
}
puts "$lnum"
set num [expr $lnum/$no]
close $file_open
}
使用全局argv数组访问命令行参数
读取文件以计算行数后,可以返回到文件顶部,而不是关闭文件句柄。
如果你是在*尼克斯,你有没有考虑过用*尼克斯呼叫?
这里有一种分割文本文件的方法,它的优点是一次不占用太多内存。您还可以拆分二进制文件,但然后需要使用Read而不是GET,并且还要考虑数据中是否存在记录边界;文本通常更简单
#!/usr/bin/env tclsh8.5
proc splitter {filename fileCount} {
set targetFileSize [expr {[file size $filename] / $fileCount}]
set n 0
set fin [open $filename]
while {[gets $fin line]} {
if {![info exist fout]} {
set fout [open $filename.split_[incr n] w]
}
puts $fout $line
if {[tell $fout] > $targetFileSize} {
close $fout
unset fout
}
}
if {[info exist fout]} {
close $fout
}
close $fin
}
splitter {*}$argv; # Connect to outside command line
这将按近似的文件大小而不是行长度进行分割,但当所有行的长度都相似时,差异最小,这意味着您可以在一次传递中完成这一切。