目次
matriXscan というメール関連製品のログをチェックしたことがありました。 そのときに使ったテキストファイルを分割するスクリプトを紹介します。 ログのチェックはテキストエディタで開けばできるのですが、 そのときのログは 1.3 GB あり、テキストエディタでは開けない巨大なファイルになっていました。
環境
- Windows
スクリプト
コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
//定数の宣言 var ForReading = 1; //読み込み var ForWriting = 2; //書きこみ(上書きモード) var ForAppending = 8; //書きこみ(追記モード) var fileName = "ファイル名"; editFile(); function editFile() { var objFileSys; var objInFile; var objOutFile; var strScriptPath; var strRecord; var index = 0; objFileSys = new ActiveXObject("Scripting.FileSystemObject"); strScriptPath = String(WScript.ScriptFullName).replace(WScript.ScriptName,""); objInFile = objFileSys.OpenTextFile(strScriptPath + fileName, ForReading); try { var i, writingSize; do { index++; objOutFile = objFileSys.CreateTextFile(strScriptPath + "out" + index.toString() + ".txt", true); for (i = 0; i < 1000000; i++) { strRecord = objInFile.ReadLine(); objOutFile.WriteLine(strRecord); if (objInFile.AtEndOfStream == true) break; } objOutFile.Close(); } while (objInFile.AtEndOfStream==false); } catch(e) { WScript.echo("Error!"); WScript.echo(strScriptPath + "out" + index.toString() + ".txt"); } finally { objInFile.Close(); objOutFile.Close(); } // オブジェクトの破棄 objFileSys = null; objInFile = null; objOutFile = null; strScriptPath = null; strRecord = null; return 0; } |
特徴
- ダブルクリックで動く JScript です。
- スクリプトと同じディレクトリのファイルを、同じディレクトリに分割していきます。 分割後のファイル名は out1.txt, out2.txt, … となります。
- 分割対象のファイル名はコード内に直接記入します。
- 既に出力ファイルと同じ名前のファイル out1.txt が存在しても、上書きの確認画面は出ません。
- JScriptを使っているのでWindowsでしか動きません。
- テキストファイルの分割は、行レベルで行います。 そのためコード内で行数を指定しています。 一行の長いファイルだと分割方法を変える必要があり、上のコードでは分割できません。
即席で作ったコードです、改善点はたくさんあります。
100万行ごとに区切ったところ、 1.3 GB のファイルは 10個程のテキストファイル (それぞれ 100 MB 程度) に分割さました。 このレベルなら普通のテキストエディタで開けます。