如何在 Adobe Indesign 的 extendscript 中定义换行符
How to define a line break in extendscript for Adobe Indesign
我正在使用 extendscript 从下载的纯文本电子邮件 (.txt) 中构建一些发票
文件中的某些位置有看起来像 "Order Number: 123456" 的文本行,然后该行结束。我有一个脚本,该脚本由我在该站点上找到的部分组成,该脚本找到 "Order Number:" 的末尾以获得子字符串的起始位置。我想使用 return 键被击中的位置转到下一行作为第二个索引号来完成子字符串。为此,我从该站点的帮助人员那里获得了另一段脚本,该脚本根据角色的每个实例的索引制作了一个数组。然后,我将使用比子字符串的第一个数字更大的数组对象。
有点绕,不过我还不太会Javascript,如果有更简单的方法,我不知道。
在 javascript 的 extendscript for indesign 中模拟 txt 文件中的 return 键需要使用什么字符?
谢谢。
我已经尝试过像 \n 和 \r\n 和 ^p 这样的东西,它们周围都有引号和没有引号,但是当我尝试它们时,其中 none 似乎出现在数组中。
//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" 中的索引数组。
编辑: 我的导入方法删除了文档中的所有换行符。使用下面的代码效果更好。现在 \n 有效。
var file = File("~/Desktop/Test/email.txt", "utf-8");
file.open("r");
var str = file.read();
file.close();
请尝试\n和\r
示例:索引(str, "\r");
如果我理解得很好,你需要的是 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;
}
您需要使用正则表达式。根据您需要搜索的字段,您需要调整正则表达式,但我可以给您一点。如果电子邮件中的字段由换行符分隔,则类似的内容将起作用:
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:)
您正在寻找字段,您可以添加更多字段,用 the 或字符分隔 | , 括号内。 .*?\n
运算符匹配任何字符,直到出现第一个换行符。 g
标志表示您要查找所有匹配项。然后你调用 str.replace
,因为它允许你在每场比赛中执行一个任务。因此,如果字段和值的分隔符是冒号“:”,则将匹配拆分为两个值的数组:['Order number', 12345]
,然后将匹配存储到一个对象中。该代码将产生:
fields = {
OrderNumber: 12345,
Adresss: "my fake adress 000"
}
我正在使用 extendscript 从下载的纯文本电子邮件 (.txt) 中构建一些发票
文件中的某些位置有看起来像 "Order Number: 123456" 的文本行,然后该行结束。我有一个脚本,该脚本由我在该站点上找到的部分组成,该脚本找到 "Order Number:" 的末尾以获得子字符串的起始位置。我想使用 return 键被击中的位置转到下一行作为第二个索引号来完成子字符串。为此,我从该站点的帮助人员那里获得了另一段脚本,该脚本根据角色的每个实例的索引制作了一个数组。然后,我将使用比子字符串的第一个数字更大的数组对象。
有点绕,不过我还不太会Javascript,如果有更简单的方法,我不知道。
在 javascript 的 extendscript for indesign 中模拟 txt 文件中的 return 键需要使用什么字符?
谢谢。
我已经尝试过像 \n 和 \r\n 和 ^p 这样的东西,它们周围都有引号和没有引号,但是当我尝试它们时,其中 none 似乎出现在数组中。
//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" 中的索引数组。
编辑: 我的导入方法删除了文档中的所有换行符。使用下面的代码效果更好。现在 \n 有效。
var file = File("~/Desktop/Test/email.txt", "utf-8");
file.open("r");
var str = file.read();
file.close();
请尝试\n和\r
示例:索引(str, "\r");
如果我理解得很好,你需要的是 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;
}
您需要使用正则表达式。根据您需要搜索的字段,您需要调整正则表达式,但我可以给您一点。如果电子邮件中的字段由换行符分隔,则类似的内容将起作用:
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:)
您正在寻找字段,您可以添加更多字段,用 the 或字符分隔 | , 括号内。 .*?\n
运算符匹配任何字符,直到出现第一个换行符。 g
标志表示您要查找所有匹配项。然后你调用 str.replace
,因为它允许你在每场比赛中执行一个任务。因此,如果字段和值的分隔符是冒号“:”,则将匹配拆分为两个值的数组:['Order number', 12345]
,然后将匹配存储到一个对象中。该代码将产生:
fields = {
OrderNumber: 12345,
Adresss: "my fake adress 000"
}