@Revers said in Поддержка формата shadowsocks proxy как в Python:
Я же не для того изучал BAS с его появления, чтобы переходить на Python!
А понимание так и не пришло
@DrPrime, не, ресур - это не скрытый список точно. @ruzne прав, там скорее построчная работа с файлом. В оперативку массив не грузится. Я так понимаю, что прога Penguin для работы с ключевыми словами также работает. Т.е. если у тебя в ресурсе большой файл с кучей строк, то это дело будет довольно долго обрабатываться в любом случае. И без многопотока, видимо.
@Antonio не я то так понял что все так может и оказаться, ведь нужно както хранить информацию о том какие строки в файле использованы, допустим если с файла берется каждая строка по одному разу, ну ладно если по проядку, можно смещение запоминать и этого достаточно будет, а если поставить мешать строки? ну всм, еще раз, как знать какие строки уже были использованы а какие нет?
@Antonio
Да. Бас вылетает.
Проведите експеримент
Создайте русурс, с галочкой чтение.
Включите запись скрипта.
Посмотрите сколько оперативы занимает бас и воркер
Потом в ресурсе снимиье галочку чтение, и поставьте галочку запись.
Повторите замеры
@DrPrime да я действительно это и получил попарсив файл на 30+ гигов, только, на сколько я увидел файл грузится не весь сразу а последовательно, начало фала у меня удачно распарсено, позже вместо результатов идут пустые строки и так до падения
perl рулит, 8 строк крайне тупого кода, грызут 30 Гигобайт и не чирикают.
@DrPrime Улучшено старое апи для работы с ресурсами.
RMap("ИМЯ РЕСУРСА") возвращает объект, который имеет несколько полезных методов:
//Возвращает количество элементов в ресурсе.
length()
//Получает элемент по индексу.
at(index)
//Изменяет элемент ресурса с заданным индексом.
set(index, value)
//Поиск элемента, возвращает найденный индекс или -1.
indexOf(value)
//Удалить элемент по индексу.
remove(index)
//Добавить новый элемент в ресурс.
insert(value)
//Синхронизировать ресурс, для файла - поместить все элементы ресурса в файл.
sync()
//Получить несколько разных случайных элемента из ресурса. Работает очень быстро.
random(size)
//Вернуть список, который содержит все элементы из ресурса.
toList()
//Подгрузить ресурс из файла.
reload()
Простой пример использования, вывести все элементы ресурса:
var lines = RMap("lines")
for(var i = 0;i<lines.length();i++)
log(lines.at(i))
Проверить, существует ли строка в ресурсе:
var index = lines.indexOf("account1")
if(index >= 0)
log("Строка существует")
else
log("Строка не существует")
Удалить элемент ресурса по значению
var index = lines.indexOf("account1")
lines.remove(index)
Удалить элемент ресурса по значению и записать изменения в файл.
var index = lines.indexOf("account1")
lines.remove(index)
lines.sync()
Новое апи будет доступно в следующем билде.
Модуль ресурсы тоже будет обновлен, но вместе с интерактивной документацией.
Большинство методов работало, сейчас заметил, что Удалить элемент ресурса и записать изменения в файл не работают.
Вот так не работает:
var test = RMap("acc")
test.remove(0)
test.sync()
даже если у ресурса есть галочка запись. Файл не изменяется.
Когда вот так работает, даже если галочки запись нет
_R["acc"].die()
_R["acc"] = null
RSync("acc")
Используемая строка из ресурса удаляется.
@support Почему так, и где я допустил ошибку?
var test = RMap("acc")
test.set(0, "test11")
test.sync()
Тоже не срабатывает
Вот тестовый скрипт
@support А когда, хоть приблизительно, стоит ожидать фикс?
Ещё одну странность заметил, создал ресурс test, записал в него циклом значения [[CYCLE_INDEX]]:[[CYCLE_INDEX]].
Вывожу в лог:
log({{test}}) //[00:27:33] Поток №1 : 1:1
log(RMap("test").at(0)) //[00:27:33] Поток №1 : 1:1
далее изменяю первую строку в ресурсе
var test = RMap("test")
test.set(0, "value")
test.sync()
вывожу в лог:
log({{test}}) //[00:29:53] Поток №1 : 1:1
log(RMap("test").at(0)) //[00:29:53] Поток №1 : value
И получить из {{test}} value не выходит ни какими синхронизациями..
При перезагрузки ресурса, получаем:
log({{test}}) //[00:46:30] Поток №1 : 1:1
log(RMap("test").at(0)) //[00:46:30] Поток №1 :
Вот тестовый скрипт.
Странности на этом не заканчиваются.
Если после создания ресурса не выводить значение в лог, а сразу поменять, то после замены в логе получим:
log({{test}}) //[00:51:23] Поток №1 : value
log(RMap("test").at(0)) //[00:51:23] Поток №1 : value
Но после вывода в лог ресурса, поменять его уже не удаётся:
var test = RMap("test")
test.set(0, "HE value")
test.sync()
лог:
log({{test}}) //[00:56:05] Поток №1 : value
log(RMap("test").at(0)) //[00:56:05] Поток №1 : HE value
Вот второй скрипт