Как определить разрыв строки в extendscript для Adobe Indesign - PullRequest
0 голосов
/ 14 мая 2019

Я использую extendscript для создания некоторых счетов из загруженных текстовых писем (.txt)

В точках файла есть строки текста, которые выглядят как «Номер заказа: 123456», и затем строка заканчивается.У меня есть скрипт, сделанный из частей, которые я нашел на этом сайте, который находит конец «Номер заказа:», чтобы получить начальную позицию подстроки.Я хочу использовать, где клавиша возврата была нажата, чтобы перейти к следующей строке в качестве второго номера индекса, чтобы закончить подстроку.Для этого у меня есть еще один фрагмент сценария от полезных людей этого сайта, который создает массив из индексов каждого экземпляра символа.Затем я буду использовать любой объект массива, который является большим числом, чем первое число для подстроки.

Это немного запутанно, но я не очень хорош с Javascript, и если есть более простой способ, я не будуне знаю.

Какой символ мне нужно использовать для эмуляции ключа возврата в текстовом файле в javascript для extendscript для indesign?

Спасибо.

Я пробовал такие вещи, как \ 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)

Я хочу всемои разрывы строк отображаются в виде массива индексов в переменной «result».

Edit: Мой метод импорта удаляет все разрывы строк из документа.Использование кода ниже вместо этого работает лучше.Теперь \ n работает.

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

var str = file.read();  

file.close();  

Ответы [ 3 ]

0 голосов
/ 16 мая 2019

Если я хорошо понял, то тебе нужно 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;
}
0 голосов
/ 16 мая 2019

Вам необходимо использовать регулярные выражения. В зависимости от того, какие поля вам нужно искать, вам нужно настроить регулярные выражения, но я могу дать вам точку. Если поля в электронном письме разделены новыми строками, будет работать что-то подобное:

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"
}
0 голосов
/ 15 мая 2019

Пожалуйста, попробуйте \ n и \ r

Пример: indexes (str, "\ r");

...