コモノExtendScript100本ノック

超初心者のDTPオペレーターが週にひとつスクリプトを書くブログ

004.【ESTK】txtデータを結合

書いたコード

windows
※Shift-JIS、UTF-8限定

var UTF8Chk = false;
var otherEncdChk = false;
var txtFiles = File.openDialog("テキストファイルを選択してください","*.txt",true);
if (txtFiles == null){
    alert ("中断しました")
    } else {
        var tFLen = txtFiles.length;
        var tFEncode = [];
        var tFContent = [];
        for (var i=0; i<tFLen; i++){
            txtFiles[i].open("r")
            if (txtFiles[i].encoding == "UTF-8"){
                UTF8Chk = true;
                } else if (txtFiles[i].encoding != "SJIS") {
                    alert ("エンコード方式が"+txtFiles[i].encoding+"です。\n中断します。")
                    otherEncdChk = true;
                    break;
                    }
            tFEncode.push(txtFiles[i].encoding);
            tFContent.push(txtFiles[i].read());
            }
        if (otherEncdChk == false) {
            var myTxtFile = File("~/Desktop/統合テキスト.txt");
            if (UTF8Chk == true){
                myTxtFile.encoding = "UTF-8";
            } else {
                myTxtFile.encoding = "SJIS";
                }
            var myTxt = tFContent.join("\n〓〓〓\n");
            if (myTxtFile.open("w")){
                myTxtFile.write(myTxt)
                }
            }
        }
    alert ("完了");

メモ

エンコードについて

  • "When doing file I/O, Adobe applications convert 8-bit character encoding to Unicode"(Javascript Tools Guide)
    テキストを読む段階・書き込む段階でUTF-8に変換している?
  • 使用できるエンコードの種類もJavascript Tools Guideに書いてある
  • encodingはファイルを開いてからじゃないと取得できない

複数選択について

  • openDlgで複数ファイルを選択したとき、配列に入る順番は選択した順
    つまりファイル名の欄に表示されている順番の逆。
    Shiftを使って一括で選択した場合の順番はちょっとよく分からなかった。
    エクスプローラ上でファイルを一括選択して「パスとしてコピー」したときにクリップボードに入る順番と同じだと思うんだけど、そもそもあの挙動がよく分かっていない。なぜ最後に選択したファイルが一番上に来るんだろう…。

参考