【问题标题】:Mirth String Handling欢乐字符串处理
【发布时间】:2020-05-05 03:08:44
【问题描述】:

我正在使用下面的代码尝试从传入文件中去除文件扩展名并将其替换为“ACK”;

不能使用 .lastIndexOf,因为它在 Rhino 中不可用。

var _filename       = String(sourceMap.get('originalFilename'));
pos = -1;
var search = ".";

for(var i = 0; i < _filename.length - search.length; i++) {
    if (_filename.substr(i, search.length) == search) {
        pos = i;
    }
}
logger.info('_pos:' + _pos);

每次我得到 -1 的 pos 值 即未找到最后一个句号位置。

但是,如果我将文件名硬编码为“2020049.259317052.HC.P.F3M147-G”,它可以完美运行。

是否与 sourceMap.get('originalFilename') 提供非字符串或不同 字符集?

【问题讨论】:

  • lastIndexOf 在 Rhino 中可用

标签: mirth


【解决方案1】:

这是在 mirth 3.5 上测试的。事实上,Rhino 确实有 String.prototype.lastIndexOf 用于所有 mirth 版本,至少可以追溯到 mirth 3.0。您正确地将 java 字符串从 sourceMap 转换为 javascript 字符串,但是在这种情况下没有必要。

只要方法名没有冲突,Java 字符串共享 String.prototype 方法。 Java 字符串本身有一个 lastIndexOf 方法,所以这就是我的答案中调用的方法。然后,java 字符串能够无缝地从 javascript 借用 slice 方法。 javascript 方法返回一个 javascript 字符串。

如果由于某种原因文件名以 . 开头并且不包含任何其他文件名,则不会给您留下空白文件名。

var filename = $('originalFilename');
var index = filename.lastIndexOf('.');
if (index > 0) filename = filename.slice(0, index);
logger.info('filename: ' + filename);

话虽如此,我不确定为什么您的原始代码不起作用。当我用

替换第一行时
var originalFilename = new java.lang.String('2020049.259317052.HC.P.F3M147-G');
var _filename       = String(originalFilename);

它给了我正确的 pos 值 22。

【讨论】:

    【解决方案2】:

    新答案

    1. 在审查和测试了 agermano 所说的正确之后。
    2. 在您的示例代码中,您设置了pos = i,但记录了_pos
    3. 新答案var newFilename = _filename.slice(0, _filename.lastIndexOf('.'))

    旧答案

    首先,您将 JavaScript 类型和 Java 类型混合在一起。

    var _filename       = String(sourceMap.get('originalFilename'));
    

    相反,做

    var _filename       = '' + sourceMap.get('originalFilename');
    

    这将导致从 Java 字符串到 JS 字符串的类型转换。

    其次,有一种更简单的方法可以做你想做的事情。

    var _filenameArr = ('' + sourceMap.get('originalFilename')).split('.');
    _filenameArr.pop()                     // throw away last item
    var _filename = _filenameArr.join('.') // rejoin the array with out the last item
    
    logger.info('_filename:' + _filename)
    

    【讨论】:

    • 非常感谢,感谢您的修复和建议。最后一个问题 - 是否有 Rhino Javascript 参考指南可用?很难知道什么在 Mirth JS 中有效,什么无效。
    • 有点... mozilla.github.io/rhino/compat/engines.html 不确定你会发现它有多大用处。这些天来,我在 Mirth 中使用配套的 NodeApp,然后让 Mirth 对 NodeApp 进行 HTTP 调用,以执行基本 HL7 映射之外的任何操作。
    • 再次感谢您。似乎 Mirth 是一个很棒的软件工具,它的 javascript 有点让人失望。
    • 解决方案有效,但建议只是部分正确。 String(stringVar)'' + stringVar 都产生一个 javascript 字符串。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多