2011-07-22 90 views
2

如何將大文件拆分成n使用Tcl的更小文件的數量?必須通過命令行給出要分割的文件名和要創建的文件數量。以下是我迄今爲止:將大文件拆分成更小的文件

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 
} 

回答

3

這是一種分割文本文件的方法,它具有一次不佔用大量內存的優點。對於使用UNIX

#!/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 
+0

這會按照近似文件大小進行分割,而不是分割線的長度,但是當所有線條的長度都相似時,差異最小,這意味着您可以一次完成所有操作。 –

+0

謝謝你的donal,這真的很有幫助。 – deva

2
  • 使用全局argv數組訪問命令行參數
  • 你讀取的文件數,而不是關閉該文件句柄行,之後,你可以seek回到文件的頂部。
  • 如果您是* nix,您是否考慮過使用exec致電split
+0

+1;(文字大多是簡單的你也可以拆分二進制文件,但你需要使用read代替gets,並考慮是否有數據記錄邊界。)工具 –

相關問題