【问题标题】:Indesign Scripting: View array's actual content (strings) in ExtendScript consoleIndesign Scripting:在 ExtendScript 控制台中查看数组的实际内容(字符串)
【发布时间】:2019-12-03 20:34:04
【问题描述】:

我是 InDesign 脚本的初学者,想帮助自己进行调试,但我的尝试似乎碰壁了。希望有人有一些见解,可以帮助我前进。

我正在做一个小项目,它遍历一些选定的表,将 3 个表放入一个数组/变量中(完成),然后遍历这些表的内容以查找 GREP 匹配并将它们存储在数组/变量(用于进一步的用途,我现在不会涉及)

此时我的主要目标: 看看 .findGrep(); 到底是什么文本字符;函数在 ExtendScript Toolkit 应用程序的 Javascript 控制台中捕获并显示它们。

到目前为止,这里有一些过程,包括尝试过的代码和其他人的建议。 (我所有尝试使用这些都失败了......为什么我现在在这里......为什么这很长;我很抱歉)

初步尝试。 var myTables = []; (在数据浏览器中显示 [object Table]、[object Table]、[object Table] 的值

var myFinds = [];
var myTest = [];
var myCharacters = [];
app.findGrepPreferences = null;    
app.findGrepPreferences.findWhat = "\"";    
    for (x = 0; x < myTables.length; x++) {
        var myFinds = myTables[x].findGrep();
        $.writeln(myFinds);
    };

这段代码的注意事项:因为不是每个表都有 findWhat 中的字符,所以有时在这个循环中 myFinds 什么都没有,但是当它确实有东西时,它会在控制台中显示这个 [object Character],[object Character ],[对象字符]

所以有人 (firstHelp) 给了我这个:而且它没有用...在 .contents.toString() 上抛出错误; *“未定义不是一个对象”,我想,“好吧,是的,我有时在循环中看到 myFinds 没有任何内容......稍后会详细介绍”

var stringArray = [];
for( var n=0; n<myFinds.length; n++ ) {
stringArray[n] =  myFinds[n].contents.toString();
};
$.writeln(myFinds.join("\r"));

代码改造 放弃了 $.writeln(myFinds);在循环内并尝试这样做是为了将 Grep 发现收集到可以在循环外处理的变量/数组中。

for (x = 0; x < myTables.length; x++) {
$.writeln(myTables[x].cells.firstItem().texts[0].contents[0]);
myFinds.push(myTables[x].findGrep());
 };
$.writeln(myFinds);

ExtendScript Toolkit 控制台现在为 myFinds 显示此内容:

*myFinds = [Array], [object Character], [object Character], [object...
+ (object symbol) 0 =
+ (object symbol) 1 = [object Character], [object Character], [object Character]
+ (object symbol) 2 =
+ (object symbol) _proto_ =*

*再次尝试了 .contents.toString();在 myFinds 上,仍然出现相同的错误,“未定义...”,包括在数组中明显有内容时定位数组。

**所以我得到了这个提示......(但没有有用的代码可以应用于我已经拥有的东西)

“您正在处理与文本混合的数组。

所以你必须检查结果数组的每个项目是否是文本 或其他文本数组。

如果是数组,则循环该数组。” 后来这段代码应该“扁平化”我的数组...... a = [].concat.apply([],a); 像这样用 myFinds 替换 a,myFinds = [].concat.apply([],myFinds);什么都没做。数组及其内容在控制台中没有显示任何变化......我不知道如何遍历数组中这个数组的每个项目,找出它是文本还是另一个数组,然后将其真实内容显示给控制台。

真的...我需要在一个数组上运行多少个循环和 if/thens 等才能在控制台中显示其实际内容?但是我知道我很难将我想要的每一个小步骤分解到其微小的脚本粒度,因此我的无知经常阻碍我。如上所述,我欢迎任何建议/提示让我更接近我的“**主要目标”。谢谢

【问题讨论】:

    标签: adobe-indesign


    【解决方案1】:

    关于第一个帮助。访问 content 属性时出现错误的真正原因是您没有检查对象的类型并假定它是 Text 对象。由于 findGrep 可能找不到 Text 事件,因此您实际上得到了一个空数组。并且 Array.prototype.contents 不存在因此错误。 然后 $.writeln 是 Adob​​e ExtendScript 工具包的遗留物,即 ExtendScript 的 IDE。本产品不再由 Adob​​e 开发和维护。您应该考虑使用其他日志记录技术,例如 Visual Studio ExtendScript 插件,它允许您使用断点和所需的一切。

    【讨论】:

    • 谢谢纳伦德拉纳特。我将研究 Visual Studio 提示:看起来像要走的路。在这里你的意思是:“......你不检查对象的类型并假定它将是一个文本对象。”我假设这是通过 if/then 完成的?我该怎么做?我不知道如何“检查对象的类型”。听起来像一个简单的 sn-p 就可以做到,但可能涉及更多。我不知道。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多