Преобразовать ASCII-кодированную строку в обычную строку - Javascript

Списки не работают в Automation Anywhere и были ошибочными для нескольких версий. Я предлагаю не использовать их и вместо этого использовать XML.

Это гораздо более универсальный подход и позволяет делать гораздо больше, чем в списках. Вы можете искать, фильтровать, вставлять, удалять и т. Д.

В этом примере вы должны использовать команду «Вставить узел».

-1
задан a2441918 19 January 2019 в 01:52
поделиться

3 ответа

Когда вы комбинируете два элемента строки, вам нужно вызвать 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 для цикла` и увеличите индекс на количество символов, которое вы сопоставили.

0
ответ дан Barmar 19 January 2019 в 01:52
поделиться

Я бы сделал так

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}"`);

Некоторые заметки:

  • [1120 ] Предполагается, что значения в зашифрованной строке изменяются от 32 до 127. Проверка ошибок отсутствует

  • Нет причин вызывать parseInt, поскольку JavaScript преобразует строки чисел в числа, передавая числа как строки в String.fromCharCode работ.

Что касается того, почему ваш код не работает, несколько вопросов включают в себя

  1. - он зацикливается на каждом символе, а не на каждом коде.

    Он зацикливается на 8, 4, 1, 1, 4, ... вместо 84, 114, ...

    Это означает, что ни один тест не пройдет, так как item никогда не будет найден в validAscii, что означает, что result не будет ничего подталкивать к нему.

  2. Там нет функции Array.fromCharCodeAt

    result является массивом и нет такой функции, как array.fromCharCodeAt. Если в результате были правильные коды, вы можете использовать String.fromCharCode(...result)

0
ответ дан gman 19 January 2019 в 01:52
поделиться

Вы хотите 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))

0
ответ дан JohanP 19 January 2019 в 01:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: