![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
イラストレーターで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ランキング
-
JavaScriptによる....
-
ブラウザからエクセルを開く方法
-
Ajaxが動きません~『status=0』?
-
VBAによる第3、4水準文字の判定...
-
jsファイルを閲覧者がダウンロ...
-
innerHTMLなどの反映タイミング
-
JavaScriptで ブラウザの閉じる...
-
JSPの処理の途中で、JavaScript...
-
リクエスト結果が一瞬しか表示...
-
”吴”とはなんですか?
-
正整数の半角数字かどうか判定する
-
PHP処理実行後のページの遷移に...
-
ローカルフォルダにあるPHPファ...
-
htmlのfileタグに自動で値を入...
-
javascript中の記述でのJSP文<%%>
-
CSJSとSSJSの違い
-
javascriptで最初のところに戻...
-
javascriptでエクセルデータ読...
-
フォルダを自動で開く
-
ラベルの色がかわってくれない
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jsでルートディレクトリより上...
-
Ajaxが動きません~『status=0』?
-
ブラウザからエクセルを開く方法
-
JavaScriptでテキス...
-
html組込み時のカレントフォル...
-
nodeでJavaScriptの標準入力
-
ローカルのtest.txtを1行ずつ...
-
JavaScriptによる....
-
ブラウザ上でjavascriptを編集...
-
ローカル環境で動作しないJavaS...
-
ajax 通信 iisの設定?
-
ブックマークレットが動かない。
-
ジャバスクリプトがポップアッ...
-
ActiveXObjectについて
-
javascriptでサーバ上のActives...
-
ブラウザ上でファイルの修正を行う
-
Illustrator でjavascriptによ...
-
XMLHttpRequestオブジェクトに...
-
node.jsでmysqlをローカル環境...
-
JavaScriptを使ってファイルの...
おすすめ情報