Try using "Template" action and construct your text with hyerlinks than paste it to page.
Other option is to create simple LOCAL html page somewhere on your hard disk with
desired text and links, than open that local html page in another tab in BAS and than copy
from that tab to the tab where you are working.
Изменение глобальной переменной в "Выполнить код"
-
Выдает ошибку при любой попытке изменить в своём коде глобальную переменную, например:
var str = [[GLOBAL:AKKFREEUSED_STR]];
[[GLOBAL:AKKFREEUSED_STR]] = str.substr(0, 100);Как решить проблему?
Спасибо. -
@Vituskosoy Получить глобальную переменную
JSON.parse(P("basglobal", "AKKFREEUSED_STR"))Установить глобальную переменную
PSet("basglobal", "AKKFREEUSED_STR", val) -
@senerg said in Изменение глобальной переменной в "Выполнить код":
зачем парсить глобальную переменную?
Она хранится в json виде
@senerg said in Изменение глобальной переменной в "Выполнить код":
Получается в коде ее в глобальном виде использовать нельзя?
Можно.
-
@fox, можете показать как? Пытаюсь объединить два одинаковых 2d массива (один из них глобальный), но выдает ошибку Parse error:
[[GLOBAL:[[FIN_LIST]]]].push([[FIN_LIST]]);Так тоже не хочет:
var tempGlobal = JSON.parse(P("basglobal", "FIN_LIST")); tempGlobal.push([[FIN_LIST]]); [GLOBAL:[[FIN_LIST]]]] = PSet("basglobal", "tempGlobal", val);И так:
var tempGlobal = [GLOBAL:[[FIN_LIST]]]]; tempGlobal.push([[FIN_LIST]]); PSet("basglobal", "FIN_LIST", (JSON.stringify(tempGlobal))); -
@senerg said in Изменение глобальной переменной в "Выполнить код":
Так тоже не хочет:
var tempGlobal = JSON.parse(P("basglobal", "FIN_LIST"));
tempGlobal.push([[FIN_LIST]]);
[GLOBAL:[[FIN_LIST]]]] = PSet("basglobal", "tempGlobal", val);Разумеется не хочет, я бы тоже не стал
:D
@senerg said in Изменение глобальной переменной в "Выполнить код":
можете показать как? Пытаюсь объединить два одинаковых 2d массива (один из них глобальный)
var val = JSON.parse(P("basglobal", "GLOBAL_LIST")) val.push(VAR_NEW_LIST2) PSet("basglobal", "GLOBAL_LIST", JSON.stringify(val))Можно было бы записать всё в одну строку:
PSet("basglobal", "GLOBAL_LIST", JSON.stringify(JSON.parse(P("basglobal", "GLOBAL_LIST")).push(VAR_NEW_LIST2))) // 4Но метод push() возвращает новую длину массива. По этому сперва парсим в переменную, добавляем в конец исходного массива новый массив и записываем обратно в глобальную переменную.
Вот тестовый скрипт
-
Думаю стоит наглядно показать что и как происходит.
Мы создали массив[[NEW_LIST]] = ["один","два","три"]Поместили его в глобальную переменную:
var val = JSON.stringify(VAR_NEW_LIST); PSet("basglobal", "GLOBAL_LIST", val)В глобальной переменной данные хранятся в json виде для надёжности и безопасности. Увидеть их можно кодом без парсинга:
log(P("basglobal", "GLOBAL_LIST"))["один","два","три"]Далее создаём ещё один массив:
[[NEW_LIST2]] = ["один2","два2","три2"]и добавляем его к глобальной переменной:
var val = JSON.parse(P("basglobal", "GLOBAL_LIST")) //спарсили глобальную переменную в переменную val val.push(VAR_NEW_LIST2) //добавили один элемент в конец массива PSet("basglobal", "GLOBAL_LIST", JSON.stringify(val)) //преобразовали новый массив в строку JSON и записали его в глобальную переменнуюПолученный двумерный массив хранится так же в json:
["один","два","три",["один2","два2","три2"]]Чтобы получить нужный элемент, обращаемся к их числовым индексам:
[[GLOBAL:GLOBAL_LIST]][3][0] //один2 -
@fox said in Изменение глобальной переменной в "Выполнить код":
val.push(VAR_NEW_LIST2) //добавили один элемент в конец массива
Спасибо, стало на много понятнее, но не до конца. Здесь вы ошиблись, добавили весь второй массив в первую свободную ячейку первого массива:

Не подскажете как добавить не целиком массив в ячейку, а элементы этого массива друг под другом чтобы получилось три вложенных массива:[один, один2], [два, два2], [три, три2] -
@senerg said in Изменение глобальной переменной в "Выполнить код":
Здесь вы ошиблись, добавили весь второй массив в первую свободную ячейку первого массива
Ошибся? Вы просили объединить два массива, что я и сделал.
@senerg said in Изменение глобальной переменной в "Выполнить код":
Не подскажете как добавить не целиком массив в ячейку, а элементы этого массива друг под другом чтобы получилось три вложенных массива:
Пишите алгоритм формирования итогового массива из других массивов как вам угодно
-
@fox said in Изменение глобальной переменной в "Выполнить код":
PSet("basglobal", "GLOBAL_LIST", JSON.stringify(val)) //преобразовали новый массив в строку JSON и записали его в глобальную переменную
В node.js это не работает? Пишет:
PSet is not defined -
@senerg said in Изменение глобальной переменной в "Выполнить код":
В node.js это не работает? Пишет:
Да, это api BAS, в ноде свои глобальные переменные global.arr
-
@senerg said in Изменение глобальной переменной в "Выполнить код":
Стрелочные функции, которыми я хотел обработать массив в обычном коде не работают.
Стрелочные функции можно просто не использовать, поищите на форуме я приводил пример. Или у вас чужой готовый код?
@senerg said in Изменение глобальной переменной в "Выполнить код":
А как в ноде это сделать?
Можете получить глобальную переменную или установить её в ноде просто перетянув действие "установить глобальную переменную" в окно ноды. Либо заранее получать данные в локальную переменную.
-
@fox said in Изменение глобальной переменной в "Выполнить код":
поищите на форуме я приводил пример
-
@fox странно, стрелочные функции убрал, в яваскрипте это работает:
var ar1 = []; ar1[0] = []; ar1[0][0] = 1; ar1[0][1] = 2; ar1[1] = []; ar1[1][0] = 3; ar1[1][1] = 4; var ar2 = []; ar2[0] = []; ar2[0][3] = 5; ar2[0][4] = 6; ar2[1] = []; ar2[1][3] = 7; ar2[1][4] = 8; ar2.forEach(function(subarr, i) { Object.assign(ar1[i], subarr); }); console.log(ar1);А тоже самое в басе не хочет:
var val = JSON.stringify([[FIN_LIST]]); PSet("basglobal", "FIN_LIST", val); val = JSON.parse(P("basglobal", "FIN_LIST")); [[FIN_LIST]].forEach(function(subarr, i) { Object.assign(val[i], subarr); }); PSet("basglobal", "FIN_LIST", JSON.stringify(val));Пишет:
Result of expression 'Object.assign' [undefined] is not a function@allive, перечитал не все, но уже очень многое.
-
@senerg Читайте/ Пришлось по закромам пошарить Дэвид Флэнаган - JavaScript. Подробное руководство (6-е издание) - 2012.pdf
большинство фунциклеров робит в басе из этого. В басе то что работает в хроме 70 не работает. Ну или работает совсем не все так правильнее.