如何在Adobe Indesign的扩展脚本中定义换行符

时间:2019-05-14 14:19:11

标签: javascript arrays adobe-indesign extendscript

我正在使用extendscript从下载的纯文本电子邮件(.txt)构建一些发票

在文件中的某些点上,有几行看起来像“订单号:123456”的文本,然后该行结束。我有一个脚本,该脚本由在此站点上找到的部件组成,该脚本查找“订单号:”的末尾,以获取子字符串的起始位置。我想使用点击返回键的位置转到下一行作为第二个索引号来完成子字符串。为此,我从该站点的有用人员那里得到了另一段脚本,该脚本从字符的每个实例的索引中组成一个数组。然后,我将使用比第一个数字高的子字符串作为数组对象。

这有点令人费解,但是我对Javascript还不满意,如果有更简单的方法,我也不知道。

我需要使用什么字符来模拟javascript中txt文件中用于indesign的extendscript的返回键?

谢谢。

我已经尝试了诸如\ n和\ r \ n和^ p之类的东西,但都带有引号和不带引号,但是当我尝试使用时,似乎没有一个出现在数组中。

//Load Email as String

var b = new File("~/Desktop/Test/email.txt");

b.open('r');

var str = "";

while (!b.eof)

    str += b.readln();

b.close();

var orderNumberLocation = str.search("Order Number: ") + 14;


var orderNumber = str.substring(orderNumberLocation, ARRAY NUMBER GOES HERE)

var loc = orderNumberLocation.lineNumber


function indexes(source, find) {
    var result = [];
    for (i = 0; i < source.length; ++i) {
        // If you want to search case insensitive use 
        // if (source.substring(i, i + find.length).toLowerCase() == find) {
        if (source.substring(i, i + find.length) == find) {
            result.push(i);
        }
    }
    alert(result)
}

indexes(str, NEW PARAGRAPH CHARACTER GOES HERE)

我希望所有的换行符都显示为变量“结果”中的索引数组。

编辑:我的导入方法从文档中剥离了​​所有换行符。使用下面的代码效果更好。现在\ n有效。

var file = File("~/Desktop/Test/email.txt",  "utf-8");  
file.open("r");  

var str = file.read();  

file.close();  

3 个答案:

答案 0 :(得分:0)

请尝试\ n和\ r

示例:indexs(str,“ \ r”);

答案 1 :(得分:0)

如果我了解得很好,您需要str.split()

function indexes(source, find) {
    var order;
    var result = [];
    var orders = source.split('\n'); //returns an array of strings: ["order: 12345", "order:54321", ...]
    for (var i = 0, l = orders.length; i < l; i++)
    {
        order = orders[i];
        if (order.match(/find/) != null){
            result.push(i)
        }
    }
    return result;
}

答案 2 :(得分:0)

您需要使用正则表达式。根据需要搜索的字段,您需要对正则表达式进行t周的修改,但是我可以给您一个要点。如果电子邮件中的字段用新行分隔,则可以执行以下操作:

var str; //your string
var fields = {}
var lookFor = /(Order Number:|Adress:).*?\n/g;

str.replace(lookFor, function(match){
    var order = match.split(':'); 
    var field = order[0].replace(/\s/g, '');//remove all spaces
    var value = order[1];
    fields[field]= value;
})

使用(Order Number:|Adress:)寻找字段时,可以添加更多由或字符分隔的字段。 ,放在括号内。 .*?\n运算符会匹配任何字符,直到出现第一个分隔线。 g标志指示您要查找所有匹配项。然后调用str.replace,因为它允许您在每次比赛中执行单个任务。因此,如果字段和值的分隔符是冒号':',则将匹配项拆分为两个值的数组:['Order number', 12345],然后将匹配项存储到对象中。该代码将产生:

fields = {
    OrderNumber: 12345,
    Adresss: "my fake adress 000"
}