大きなtxtファイルを短いtxtファイルに分割(分割)したいとします。たとえば、file.txt
で、700 MBです。これを7つの(100 MB) txtファイル。大きなテキストファイルを短いファイルに分割する
私は何をするつもりですか?テキストファイルを開いたり、テキストファイルの内容を変更したりせずに分割する方法はありますか?この問題の既知のアルゴリズムがある場合は、それらを共有してください。 おかげ
大きなtxtファイルを短いtxtファイルに分割(分割)したいとします。たとえば、file.txt
で、700 MBです。これを7つの(100 MB) txtファイル。大きなテキストファイルを短いファイルに分割する
私は何をするつもりですか?テキストファイルを開いたり、テキストファイルの内容を変更したりせずに分割する方法はありますか?この問題の既知のアルゴリズムがある場合は、それらを共有してください。 おかげ
シンプルなアプローチ -
は、ファイルの長さを取得します
は、作成したいどのように多くのファイルを参照してくださいチャンクサイズを決める - (N =ファイル長さ/チャンクサイズを)。余りがある場合、ファイル数はn + 1になります。
ファイルを読み取りモードで開きます。
書き込みモードでファイルを作成します。
チャンクのバイト数(または残っている場合は剰余バイト<チャンクサイズ)をファイルに書き込む場合は、このファイルを閉じます(おそらくフラグメントを示す1..nという接尾辞を付加します)。
n個のフラグメントに対して4-5を繰り返す。
は、UNIX
split -b100m filename part
上にある場合partaにファイル名を分割します、partb、partcなど
それはあなたの環境やニーズに適用されます念のため、標準的なUnixのソリューションはsplit
を使用することです:
split -C 100M input.txt
-C
分割は、バイト/文字の代わりに行単位で分割されます。特定のバイトで分割したい場合は、代わりに-b
を使用してください。
場合によっては、サイズと行数(場合によっては必要です)の両方で分割するオプションがあり、Windows環境にある場合は、GSplitというプログラムを使用できます。私はかつてこの問題を抱えていて、それは私のために働いた。 Googleにダウンロードすることができます。
Perlディストリビューションには、Unixに属していない場合に分割ユーティリティが含まれています。行分割には-lが使用されます。
ファイルサイズがチャンクサイズで均等に割り切れない場合は、最終的なフラグメントにどのようにお勧めしますか? –
@ギャリー - ええ..しかし、これはOPが上に実装することができれば検出するのは簡単なはずです:P ..真剣にメモを修正してください – Nrj
ありがとうございました。尾の状態を扱うことは、いつも私のために面倒だった。 –