如何使用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_open
}
答案 0 :(得分:3)
这是分割文本文件的一种方法,它具有不会立即在内存中保留太多内容的优点。 (您也可以拆分二进制文件,但是您需要使用read
而不是gets
,还要考虑数据中是否有记录边界;文本大部分都比较简单。)
#!/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
答案 1 :(得分:2)