DTP駆け込み寺
  1. [15380] javascript テキストファイルを一行ずつ読み込み ha_chan 2013/03/16 02:08
    1. [15382] Re: javascriptでテキストファイルを一行ずつ読む (z-) 2013/03/16 09:26
      1. [15388] Re^2: javascriptでテキストファイルを ha_chan 2013/03/18 10:41
        1. [15389] Re^3: javascriptでテキストファイルを 流星光輝 2013/03/18 12:42
        2. [15391] Re^3: javascriptでテキストファイルを miyaji 2013/03/18 17:13
        3. [15393] Re^3: javascriptでテキストファイルを ひじまる 2013/03/18 22:25
          1. [15395] Re^4: javascriptでテキストファイルを ha_chan 2013/03/19 16:08

[ 返信 ]

javascript テキストファイルを一行ずつ読み込み

初めまして、ご教示願いたく投稿いたします。
OSX 10.6 イラレCS4の環境です。
下記の処理をjavascriptで組み立てようとしています。

レイヤー1
レイヤー2
レイヤー3
上記のテキストファイルから一行ずつ読み込み、同じレイヤー名について表示の設定を行う。

一行ずつ読込むという文法が探しきれず行き詰まっています。
よろしくお願いいたします。

[15380] ha_chan (2013/03/16 Sat 02:08)

[ 返信 ]


Re: javascriptでテキストファイルを一行ずつ読む

> 一行ずつ読込むという文法が探しきれず行き詰まっています。

File.readln()
ではなくて?

[15382] (z-) (2013/03/16 Sat 09:26)

[ 返信 ]


Re^2: javascriptでテキストファイルを

> > 一行ずつ読込むという文法が探しきれず行き詰まっています。
>
> File.readln()
> ではなくて?
z-様
アドバイスをありがとうございます。
いろいろ情報を探し
下記のスクリプトを作ってみましたが動きません。
テキストファイルは
"L1"
"L2"
という内容です。
イラレのファイルのレイヤーは
L1
L2
という内容です。

//ファイルを選択
filename = File.openDialog("Select");
if (filename) {
fileObj = new File(filename);
}
for (var ii = 0; ii <= 2; ii++) {

//一行目だけ最初にテキストを読む。あとは繰り返し処理中に読む
if (ii== 0) {

var line = fileObj.readln() ; //テキストファイルから1行読み込み変数に代入

var layObj= activeDocument.layers[line];
layObj.visible=true
alert("visible!")
}
}

visibleというメッセージが一回だけ表示され終了してしまいます。
「var layObj= activeDocument.layers[line];」ここがおかしいと思いますが情報がみつかりません。
お手数ですがよろしくお願いいたします。

[15388] ha_chan (2013/03/18 Mon 10:41)

[ 返信 ]


Re^3: javascriptでテキストファイルを

横レス失礼します。

> var line = fileObj.readln() ; //テキストファイルから1行読み込み変数に代入

で、変数lineにL1とかL2は入ったのでしょうか?

であれば、

> var layObj= activeDocument.layers[line];

itemByNameが必要なんじゃないすかね?(確認してませんけれど)

[15389] 流星光輝 (2013/03/18 Mon 12:42) web

[ 返信 ]


Re^3: javascriptでテキストファイルを

> var line = fileObj.readln() ; //テキストファイルから1行読み込み変数に代入

読み込む前に
fileObj.open("r");
でファイルを開いて

で終わったら
fileObj.close();
でファイルを閉じましょう

[15391] miyaji (2013/03/18 Mon 17:13)

[ 返信 ]


Re^3: javascriptでテキストファイルを

> > > 一行ずつ読込むという文法が探しきれず行き詰まっています。
> >
> > File.readln()
> > ではなくて?
> z-様
> アドバイスをありがとうございます。
> いろいろ情報を探し
> 下記のスクリプトを作ってみましたが動きません。
> テキストファイルは
> "L1"
> "L2"
> という内容です。
> イラレのファイルのレイヤーは
> L1
> L2
> という内容です。
>
> //ファイルを選択
> filename = File.openDialog("Select");
> if (filename) {
> fileObj = new File(filename);
> }
> for (var ii = 0; ii <= 2; ii++) {
>
> //一行目だけ最初にテキストを読む。あとは繰り返し処理中に読む
> if (ii== 0) {
>
> var line = fileObj.readln() ; //テキストファイルから1行読み込み変数に代入
>
> var layObj= activeDocument.layers[line];
> layObj.visible=true
> alert("visible!")
> }
> }
>
> visibleというメッセージが一回だけ表示され終了してしまいます。
if文を見ると(ii==0)の時だけ処理するようになってますね。
だからvisibleというメッセージが一回だけ表示され終了するのはプログラム的には正しいです。
行き詰まったらシンプルな所から少しずつ確実に動く事を確かめながら
順を追っていく事をお勧めします。

var F = File.openDialog("Select");
F.open("r");
while(l = F.readln()){
alert(l)
}
F.close();

[15393] ひじまる (2013/03/18 Mon 22:25)

[ 返信 ]


Re^4: javascriptでテキストファイルを

> > > > 一行ずつ読込むという文法が探しきれず行き詰まっています。
> > >
> > > File.readln()
> > > ではなくて?
> > z-様
> > アドバイスをありがとうございます。
> > いろいろ情報を探し
> > 下記のスクリプトを作ってみましたが動きません。
> > テキストファイルは
> > "L1"
> > "L2"
> > という内容です。
> > イラレのファイルのレイヤーは
> > L1
> > L2
> > という内容です。
> >
> > //ファイルを選択
> > filename = File.openDialog("Select");
> > if (filename) {
> > fileObj = new File(filename);
> > }
> > for (var ii = 0; ii <= 2; ii++) {
> >
> > //一行目だけ最初にテキストを読む。あとは繰り返し処理中に読む
> > if (ii== 0) {
> >
> > var line = fileObj.readln() ; //テキストファイルから1行読み込み変数に代入
> >
> > var layObj= activeDocument.layers[line];
> > layObj.visible=true
> > alert("visible!")
> > }
> > }
> >
> > visibleというメッセージが一回だけ表示され終了してしまいます。
> if文を見ると(ii==0)の時だけ処理するようになってますね。
> だからvisibleというメッセージが一回だけ表示され終了するのはプログラム的には正しいです。
> 行き詰まったらシンプルな所から少しずつ確実に動く事を確かめながら
> 順を追っていく事をお勧めします。
>
> var F = File.openDialog("Select");
> F.open("r");
> while(l = F.readln()){
> alert(l)
> }
> F.close();

皆様、ありがとうございました。
やっと、希望していたものが出来上がりました。
具体的な実務としては
ある印刷物について、データベースに登録してあるレイヤー名の情報から
紙をプリントし、それを見ながらイラレの上でレイヤーを選択するという
ワークフローでした。
それを自動化することが今回作成のスクリプトです。
データベースはすでにあるので、イラレでスクリプトを走らせられれば
版下が自動的にできあがります。

追加で作成する工程としては
レイヤーをすべて非表示にする。
今回のスクリプトを動かした後に非表示のレイヤーをすべて削除する
この二点です。
自力で何とかなりそうです。

出来上がったスクリプト
var F = File.openDialog("Select");//テキストファイルを選択する//
F.open("r");//ファイルを開ける
//ファイルの最後まで一行ずつ読み込む。
while(l = F.readln()){
var layerObj = activeDocument.layers; // アクティブドキュメントのLayer
//すべてのレイヤーについて
//テキストファルと一致したレイヤー名について
//レイヤーを表示状態にしロックを外す
for(var i=layerObj.length-1; i>=0; i--){
if (layerObj[i].name == l){
layerObj[i].visible = true;
layerObj[i].locked = false;}

}
}
//ファイルを閉じる
F.close();
alert("終了");
//
また行き詰まった際はよろしくお願いいたします。

[15395] ha_chan (2013/03/19 Tue 16:08)