クリエイター手抜きプロジェクト[345]Adobeソフト編 指定文字数でテキストファイルを分割する/古籏一浩

投稿:  著者:  読了時間:7分(本文:約3,300文字)


140文字と言えば、Twitter(ツイッター)を思い浮かべる人が多いでしょう。140文字までしか投稿できなくても、日本語の場合漢字や顔文字のおかげで多彩な文章を表現することができます。

とは言っても、長文になると140文字では収まりません。あらかじめ、エディタなどに文章を書いておいて、それを投稿するような場合、自動的に140文字で分割してくれると楽です。

Webで探せば、そのようなサービスがありますが、ここでは任意の文字数で分割し、個別のファイルとして保存するスクリプトを載せておきます。

まず、以下のスクリプトは単純に140文字で分割するものです。




(function(){
var splitNum = 140; // 分割文字数
var fileObj = File.openDialog("140文字に分割するテキストファイルを選択してください");
if (!fileObj){ return; } // キャンセルボタンが押された場合は何もしない
var flag = fileObj.open("r");
if (!flag){
alert("ファイルが開けません");
return;
}
var saveFolder = Folder.selectDialog("保存先のフォルダを指定してください");
if (!saveFolder){ return; } // キャンセルボタンが押された場合は何もしない
// 分割処理
var count = 1; // 出力するファイルの番号を入れるカウンタ
while(!fileObj.eof){
// ファイルから一行だけ読み込み
var srcText = fileObj.readln();
if ((srcText == String.fromCharCode(13)) ||
(srcText == String.fromCharCode(10))){ continue; } // 改行コードの場合は何もしない
// 140文字以上の場合
for(var i=0; i<srcText.length; i+=splitNum){
var str = srcText.substr(Math.floor(i), splitNum);
var saveFile= new File(saveFolder.fsName +"/"+count+".txt");
flag = saveFile.open("w");
if (!flag){
alert("ファイルが書き込めません");
return;
}
// ファイルに書き出し
saveFile.writeln(str);
count = count + 1;
saveFile.close();
}
}
fileObj.close();
})();

このスクリプトでは、句読点などを無視して分割してしまいます。できれば句読点を区切りとして、140文字に近い状態で分割してほしいところです。なるべく140文字に近い句読点で分割するのが、以下のスクリプトです。

(function(){
var splitNum = 140; // 分割文字数
var fileObj = File.openDialog("140文字に分割するテキストファイルを選択してください");
if (!fileObj){ return; } // キャンセルボタンが押された場合は何もしない
var flag = fileObj.open("r");
if (!flag){
alert("ファイルが開けません");
return;
}
var saveFolder = Folder.selectDialog("保存先のフォルダを指定してください");
if (!saveFolder){ return; } // キャンセルボタンが押された場合は何もしない
// 分割処理
var count = 1; // 出力するファイルの番号を入れるカウンタ
while(!fileObj.eof){
// ファイルから一行だけ読み込み
var srcText = fileObj.readln();
if ((srcText == String.fromCharCode(13)) ||
(srcText == String.fromCharCode(10))){ continue; } // 改行コードの場合は何もしない
// 140文字以上の場合
// 加算する文字数
var addNum = splitNum; // 分割文字数を設定
for(var i=0; i<srcText.length; i+=addNum){
var saveFile= new File(saveFolder.fsName +"/"+count+".txt");
flag = saveFile.open("w");
if (!flag){
alert("ファイルが書き込めません");
return;
}
var str = srcText.substr(Math.floor(i), splitNum);
if (str.length == splitNum){ // 140文字オーバーの場合
var k1 = str.lastIndexOf("。");
var k2 = str.lastIndexOf("、");
var k = k1;
if (k2 > k1){ k = k2; } // どちらか末尾にある方を選択
if (k == -1){ k = splitNum; } // 句読点がなければ分割文字数で
str = str.substr(0, k+1);
addNum = str.length;
}else{
addNum = splitNum;
}
// ファイルに書き出し
saveFile.writeln(str);
count = count + 1;
saveFile.close();
}
}
fileObj.close();
})();

分割する文字数を変更したい場合は

var splitNum = 140; // 分割文字数

の140の値を変更してください。

【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/ >

Nexus 10のページも作ったのを忘れてました。タブレットたくさんあるんですが、最近はあまり使っていなかったりします。タブレット多く使うかと思ってiPhone 5テザリング契約してあるのですけど、殆ど使わず(動作検証くらい)。

・Nexus 10(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus10/ >

・Kindle Fire HD使い方辞典
< http://www.openspc2.org/reibun/Kindle/Fire_HD/ >

・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/ >

・iPad mini(アイパッドミニ)使い方辞典
< http://www.openspc2.org/reibun/iPad/mini/2012/ >

・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082 >

・改訂5版JavaScriptポケットリファレンス
< http://www.amazon.co.jp/dp/4774148199 >

・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/ >

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/ >

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/ >
吉田印刷所の「印刷の泉」でも購入できるようになりました。