
イラストレーターでjavascriptを実行させ、ローカルのtxtファイルから適した素材をaiファイル上に配置するといった自動化プログラムを作成したいと思っています。
具体的に言うと「test.txt」の中身が以下のような場合、
アメリカ,100,日本,50,スペイン,0
※国名は100以上のデータがありますが、順序は変わりません。数値は毎回変わります。
var map = {“アメリカ”: 100, “日本”: 50, “スペイン”: 0};
といった具合に連想配列として読み込ませる事は可能でしょうか。
イラレでtest.jsを読み込むとのaiファイル上であらかじめ作成したaiデータのテンプレートファイル上でアメリカの領域に100%の素材を配置、日本の領域に50%の素材を配置、スペインの領域には0%を配置するといったjavascriptを書きたいと思っています。テンプレート素材の再配置するスクリプトはあらかた出来上がっているのですが、ローカルのテキストファイルを連想配列として適切に読み込むjavascriptを書く事ができません。教えてください。お教願いします。
No.1ベストアンサー
- 回答日時:
こんにちは
Adobeソフトのjavascriptは使ったことがない上に、Illustratorも無いという環境なのですが・・・(笑)
photoshopが手元にあったので、試してみました。
とは言っても「photoshopでスクリプトの実行ってどうやるんだぁ??」状態から始めましたので、かなりいい加減です。
とりあえず、Adobe製品に共通そうな以下を中心に参考にしました。
http://www.openspc2.org/reibun/AdobeJS/CS6/index …
他にはこのあたりを参考に
http://kurusugawa.jp/2008/03/27/adobe-illustrato …
http://wwwimages.adobe.com/content/dam/Adobe/en/ …
Illustratorとphotoshopではファイルの読み込み方法が違うという記事もありましたが、テストした限りでは、Illustrator用の記述とされている方法でphotoshopでも読み込めました。
http://qiita.com/IDs011da/items/73c5ade1862c65c3 …
他にも若干違うところがある可能性はありますが、Illustratorでも、ほぼほぼ近いところまで行けるのではないかと想像します。
テスト環境は
Windows7 SP1
Adobe Photoshop CS5 Ver12
です。
さて、本題です。
※ ご質問文では、テキストファイルが必ず1行なのか複数行もあり得るのか不明ですが、ひとまず複数行の場合は「改行」を区切り(カンマ)と同様に判断して処理するようにしています。
※ 全体を「テキストファイルを読み込んでオブジェクト化して返す」関数にしてありますので、
var map = text2json(filePath);
のように呼び出すことで、mapにオブジェクトとして取得できるはずです。
filePathはフルパスでの指定が必要なようです。
※ ファイルが存在しない場合や内容が無い場合は、空のオブジェクトが返されます。
※ テキストファイル内のデータにクォーテーションが含まれる場合等までは配慮していません。とりあえず、ごく単純なカンマ区切りとして処理しています。
以下、ご参考まで。
(ここでは半角スペースが削除されるため、インデントを全角空白にしてありますのでご注意)
// test script( TextFile to JsonObject)
function text2json(p){
var trim = function(t){ return t?(t.replace(/^ +/,"").replace(/ +$/,"")):""; }
var o = {}, sep = ",";
var fileObj = new File(p);
if(fileObj.open("r")){
var txt = fileObj.read();
fileObj.close();
txt = txt.replace(/\r\n/g, sep).replace(/\n/g, sep);
txt = txt.split(sep);
for(var i=0; i<txt.length; i+=2){
var k = trim(txt[i]), v = trim(txt[i+1]);
if(k != "") o[k] = v;
}
}
return o;
}
ありがとうございました。
まさに「テキストファイルを読み込んでオブジェクト化して返す」関数を書きたいのですが書いていただいたスクリプトをコピペしても出来ませんでした。私の実力不足です。もうちょっと粘ってみます。
ちなみに読み込むテキストファイルは1行にしようと思います。
No.3
- 回答日時:
ANo1、2です。
>テキストとしては読み込めているようですが、
>連想配列のオブジェクトとして取り込めていないようです。
テキストに読み込めていれば、後は普通のスクリプトなので、失敗しにくいとは思うのですが……
file.read()直後にはtxtにテキストが読めていて、戻り値はどうなっているのでしょうか?
どこかでエラーが出ていますか?
短いスクリプトなので、逐次チェックしてもたいしたことはないと思いますが、正規表現の文法が違うとかかなぁ……
エラーの箇所が特定できたり、エラーの内容が分かれば、大きなヒントになるのですが・・・
出来ていました。
var map = {“アメリカ”: 100, “日本”: 50, “スペイン”: 0};
の後で100なら100.jpg、50なら50.jpgといった具合に判定させているのですが、最後の「return o;」の部分を、その判定するための連想配列まで組み込ましてやると正常に数値を拾ってきて動くことが出来ました。
本当にありがとうございました。また何かありましたらよろしくお願いします。
No.2
- 回答日時:
ANo1です。
こちらもイラレでテストはしていませんので、どこか違うところがあるかも知れないとは予想のうちです。
No1のスクリプトでテキストの読み込みまではできているでしょうか?
それとも、読み込みで失敗しているのでしょうか?
エラーが出ているとして、どこでどのようなエラーなのでしょうか?
こちらでテストはできませんが、もう少しはお役に立てるかも知れません。
なお、No1にも記しましたが、ファイルパスはフルパスで指定する必要があるようですので、念のため。
>ちなみに読み込むテキストファイルは1行にしようと思います。
1行が保証されているなら、
txt = txt.replace(/\r\n/g, sep).replace(/\n/g, sep);
の行は不要です。
また、テキストに無駄なスペースが無いことも保証されているなら、
var trim = function(t){ ~~~ }
の関数も不要になります。
(関数を使用している部分の修正が必要ですが……)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オブジェクト配列の各メンバを...
-
Outlookのアカウントがあるとメ...
-
スマホ上で、左右スワイプで次...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Adobe acrobat proでフォームを...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
-
<div>のタッチ状態を維持したま...
-
jQueryでシンセサイザーを作っ...
-
プログラミング 学習
-
HTMLでサブフレームから親のス...
-
ジャバスクリプトについて。
-
プログラムについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Illustrator でjavascriptによ...
-
JavaScriptでテキス...
-
JavaScriptによる....
-
ActiveXObjectについて
-
ブラウザからエクセルを開く方法
-
画像入替JavaScriptが動かない
-
jsでルートディレクトリより上...
-
javascriptでテキストファイル...
-
Ajaxが動きません~『status=0』?
-
JavaScriptでファイルの保存
-
星型評価スターレーティングの...
-
XMLHttpRequest 外部ソースの取得
-
誰か知ってますか?
-
JQuery+JSONでChromeでローカル...
-
nodeでJavaScriptの標準入力
-
XMLHttpRequestオブジェクトに...
-
ローカルのtest.txtを1行ずつ...
-
PowerPointで時計表示
-
JSPの処理の途中で、JavaScript...
-
VB.NET2003 テキストボックスに...
おすすめ情報