Skip to main content
Participating Frequently
May 29, 2023
Answered

オブジェクトのcontentsをcsv出力する際に改行されてしまう

  • May 29, 2023
  • 2 replies
  • 503 views

お世話になります。

 

オブジェクトのcontentsプロパティの値とオブジェクト座標を出力したいのですが、

以下例に置いてcsvが改行されて出力されます。

分かりにくいかもしれませんが、本来はcontentsと座標は1行で出力したいのですが、

contentsに改行が含まれる場合、改行して出力されます。(スクリプトではcontentsをobjtextという変数に入れています。)

 

改行がreplaceされるようにしたり、ダブルクォーテーションで囲んだりしましたが、改善が見られないため、ご教示いただける方がいらっしゃれば幸いです。

 

よろしくお願いいたします。

 

csv出力例:

contents           x座標         Y座標

ああああ    1     1

いいい 

い       2               2

 

スクリプト:

for (var i = 0; i < objects.length; i++) {
 var obj = objects[i];
 var objtext = obj.contents
 //var objtext = objtext.replace(/\r?\n/g, '');
 if (typeof objtext !== 'undefined' && objtext.contents !== undefined) {
    var objtext = objtext.replace(/\n/g, " ");
  }

 

This topic has been closed for replies.
Correct answer ajabon grinsmith

csv出力したからこそおかしいのか、そもそも正規表現検索置換をしくじっているのかが切り分けられていない印象です。

問題点を絞るために、まずreplace後のString変数が適切な状態になっているか、書き出したcsvではなく、その直前の変数の値が正しいか調べましょう。

 

ヒマな時にいろいろといじってみるとわかるのですが(ヒマな人がいない問題…)

Illustratorのテキスト中の改行文字( ¶ )は、取得すると\rですが、適用する場合は \r でも \n でも( ¶ )になります。

世間であまり使われていない印象ですが、shifr+returnで出せる強制改行文字(スクショ参照)は、\r でも \n でもありません。

余談ですがこの2点がInDesignと大きく違うところです。

 

で、単純にテキストオブジェクトのcontentsから改行類を飛ばすだけなら、こんなかんじでやってみてください。

a=app.selection[0].textRange;
a.contents = a.contents.replace(/[\r\u0003]+/g, "");

 

上記コードの実行前と実行後、こんなかんじになります。

2 replies

Participating Frequently
May 30, 2023

ご丁寧に教えていただきありがとうございます。

正規表現検索置換のミスが原因であったようです。

 

ご教示いただいたコードで無事改行類を置換し、やりたいことができました。

illustratorで扱う改行についても勉強になりました。

 

ありがとうございました!

ajabon grinsmith
Community Expert
ajabon grinsmithCommunity ExpertCorrect answer
Community Expert
May 29, 2023

csv出力したからこそおかしいのか、そもそも正規表現検索置換をしくじっているのかが切り分けられていない印象です。

問題点を絞るために、まずreplace後のString変数が適切な状態になっているか、書き出したcsvではなく、その直前の変数の値が正しいか調べましょう。

 

ヒマな時にいろいろといじってみるとわかるのですが(ヒマな人がいない問題…)

Illustratorのテキスト中の改行文字( ¶ )は、取得すると\rですが、適用する場合は \r でも \n でも( ¶ )になります。

世間であまり使われていない印象ですが、shifr+returnで出せる強制改行文字(スクショ参照)は、\r でも \n でもありません。

余談ですがこの2点がInDesignと大きく違うところです。

 

で、単純にテキストオブジェクトのcontentsから改行類を飛ばすだけなら、こんなかんじでやってみてください。

a=app.selection[0].textRange;
a.contents = a.contents.replace(/[\r\u0003]+/g, "");

 

上記コードの実行前と実行後、こんなかんじになります。