Indesign脚本编制:在ExtendScript控制台中查看阵列的实际内容(字符串)

时间:2019-12-03 20:34:04

标签: adobe-indesign

我是InDesign脚本的初学者,想帮助自己进行调试,但是我的尝试似乎遇到了麻烦。希望有人能帮助我前进的见识。

我正在做一个小项目,该项目遍历一些选定的表,将3个表放入数组/变量(完成),然后遍历这些表的内容以查找GREP匹配项并将其存储在数组/变量(有关更多用途,我现在不再赘述)

这时我的主要目标:确切地了解.findGrep()的文字字符;函数正在捕获并在ExtendScript Toolkit应用程序的Javascript控制台中显示它们。

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

初始尝试。 var myTables = []; (在数据浏览器中,它显示[对象表],[对象表],[对象表]的值

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上,仍然是相同的错误,“ undefined ...”,包括在数组明显包含某些内容时将其定位。

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

  

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

     

因此,您必须检查结果数组的每个项目是否为文本   或其他文本数组。

     

如果是数组,则循环该数组。”   然后这部分代码应该“拉平”我的数组... a = [] .concat.apply([],a);   用myFinds这样替换a,myFinds = [] .concat.apply([],myFinds);什么也没做。数组及其内容在控制台中没有显示变化...而且我也不知道如何遍历数组中该数组的每个项目,找出它是文本还是其他数组,然后将其实际内容显示给控制台。 / p>

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

1 个答案:

答案 0 :(得分:0)

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