Списки не работают в Automation Anywhere и были ошибочными для нескольких версий. Я предлагаю не использовать их и вместо этого использовать XML.
Это гораздо более универсальный подход и позволяет делать гораздо больше, чем в списках. Вы можете искать, фильтровать, вставлять, удалять и т. Д.
В этом примере вы должны использовать команду «Вставить узел».
Когда вы комбинируете два элемента строки, вам нужно вызвать parseInt()
* для результата конкатенации, а не для конкатенации результатов parseInt()
. Так и должно быть:
} else if (validAscii.includes(parseInt(item + strSplit[index+1]))){
И поскольку значения ASCII могут быть 3 цифрами, вам нужен еще один else if
, который ищет item + strSplit[index+1] + strSplit[index+2]
.
Другая проблема заключается в том, что вы нажимаете item
на строку результата. Но чтобы получить соответствующий символ, вам нужно использовать String.fromCharCode()
для преобразования каскадного кода ASCII в символ.
strSplit.forEach((item, index) => {
if (validAscii.includes(parseInt(item))) {
result.push(String.fromCharCode(item))
} else if (validAscii.includes(parseInt(item + strSplit[index+1]))) {
result.push(String.fromCharCode(parseInt(item + strSplit[index+1]))
} else if (validAscii.includes(parseInt(item + strSplit[index+1] + strSplit[index+2]))) {
result.push(String.fromCharCode(parseInt(item + strSplit[index+1] + strSplit[index+2]))
}
})
Обратите внимание, что использование forEach
, как это, вероятно, не очень хорошая идея. Если во входных данных есть перекрывающиеся элементы, которые есть в validAscii
, вы добавите оба к результату. Например. если он содержит 678
, вы сопоставите оба цикла 67
и 78 , and add the corresponding characters to the result. Instead, you should use an ordinary
для цикла` и увеличите индекс на количество символов, которое вы сопоставили.
Я бы сделал так
const encodedString = '84114117116104326510811997121115328710511011532';
const codes = [];
for (let i = 0; i < encodedString.length;) {
const numDigits = encodedString[i] === '1' ? 3 : 2;
codes.push(encodedString.substr(i, numDigits));
i += numDigits;
}
const str = String.fromCharCode(...codes);
console.log(`"${str}"`);
Некоторые заметки:
Нет причин вызывать parseInt
, поскольку JavaScript преобразует строки чисел в числа, передавая числа как строки в String.fromCharCode
работ.
Что касается того, почему ваш код не работает, несколько вопросов включают в себя
- он зацикливается на каждом символе, а не на каждом коде.
Он зацикливается на 8, 4, 1, 1, 4, ... вместо 84, 114, ...
Это означает, что ни один тест не пройдет, так как item
никогда не будет найден в validAscii
, что означает, что result
не будет ничего подталкивать к нему.
Там нет функции Array.fromCharCodeAt
result
является массивом и нет такой функции, как array.fromCharCodeAt
. Если в результате были правильные коды, вы можете использовать String.fromCharCode(...result)
Вы хотите parseInt
вокруг строки шаблона, а не отдельных элементов. Вы проверяли, включена ли строка в массив, заполненный числами.
var asciiString = '84114117116104326510811997121115328710511011532'
function strFunc(str) {
var result = []
var strSplit = str.split('');
var validAscii = [32];
for(var i=65; i<=90; i++) {
validAscii.push(i);
}
for(var i=97; i<=122; i++) {
validAscii.push(i);
}
strSplit.forEach((item, index) => {
if(validAscii.includes(parseInt(item))) {
result.push(item)
} else if (validAscii.includes(parseInt(`${(strSplit[index])}${(strSplit[index + 1])}`))){
result.push(item);
}
})
return result.join('');
}
console.log(strFunc(asciiString))