
イラストレーターで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で質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- その他(プログラミング・Web制作) Pythonで、データファイルと列名ファイルを1つのファイルにしたいです。 1 2023/07/27 20:29
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- C言語・C++・C# pythonのファイルの並びでの読み込みとリストについて 4 2022/04/13 03:52
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- CAD・DTP JWW-CADでDXF変換後の線が連動して消える 2 2023/01/13 11:09
- Illustrator(イラストレーター) Illustrator CS5 埋め込んだ画像を抽出(個別の画像で保存)できるか? 1 2022/11/28 16:18
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GASでチェックボックスを一括of...
-
スマホ上で、左右スワイプで次...
-
Cookieに保存されない
-
初心者です。gulpでコンパイル...
-
Adobe acrobat proでフォームを...
-
画面遷移を行わずに同一ページ...
-
変数宣言と初期値代入の場所に...
-
switch文のswitch(n)の部分を複...
-
jsでは、'で区切った部分を改行...
-
タグを教えてください。
-
ラジオボタンを複数選択したと...
-
jsで質問です。 formをsubmitし...
-
2025年相性がいい人のサイトの...
-
CookieをWebStoeageに変える
-
Outlookのアカウントがあるとメ...
-
jqueryのselect2で検索欄の文字...
-
<tr>指定した表の行要素をボ...
-
食材の期限を管理するためにGAS...
-
ビデオのJSについて
-
鍵盤アプリで、スマホの画面に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
スマホ上で、左右スワイプで次...
-
タグを教えてください。
-
jqueryのselect2で検索欄の文字...
-
jsonテキストデータの並び替え...
-
初心者です。gulpでコンパイル...
-
ラジオボタンを複数選択したと...
-
階層別の組織図の自動作成について
-
jQueryで同じクラス名のものを...
-
二次元配列を使って順位をだす...
-
読み込んだQRコードをフォーム...
-
画面遷移を行わずに同一ページ...
-
セレクトを全て選択されていな...
-
【Google Apps Script】「ライ...
-
Adobe acrobat proでフォームを...
-
二次元配列の全要素の全要素を...
-
【GAS】WEBアプリでハイパーリ...
-
GASでGoogleフォームの自動返信...
-
フォームが空欄の時にフォーム...
-
セレクトボックスで配列を呼び...
-
イラストレーター、縦中横のシ...
おすすめ情報