Проверить существование в ресурсе, удаление по значению

Запросы функционала
  • Большинство методов работало, сейчас заметил, что Удалить элемент ресурса и записать изменения в файл не работают.

    Вот так не работает:

    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()
    

    Тоже не срабатывает

    Вот тестовый скрипт

  • @fox Исправил. Постараюсь побыстрее добавить новое апи в интерфейс и сделать описание всех действий из модуля "Ресурсы"

  • @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
    

    Вот второй скрипт

  • @fox а как можно считать список весом 10 гиг с новым апи не загружая его как список? возможно ли его чтение?
    и проверить в нем существование строки
    Я никак не догоню в чем разница апи от использования кубика список > содержит

  • @BabloUser Можешь просто прочитать файл частями в цикле и проверять на наличие в нём нужной строки. Но любом случае текстовый файл на 10 гигов будет очень медленно работать. Лучше перевести в базу.

  • @bablouser в теме же есть примеры

  • @drprime не вижу примера без чтения списка в ресурс
    если прочитать список в оперативы не хватит у меня, если только юзать чтение частями.

  • @bablouser
    var index = lines.indexOf("account1")
    if(index >= 0)
    log("Строка существует")
    else
    log("Строка не существует")

  • @DrPrime Добавлю строку к этому коду:

    var lines = RMap("lines")
    var index = lines.indexOf("account1")
    if(index >= 0)
    log("Строка существует")
    else
    log("Строка не существует")
    

    @BabloUser Даже если использовать как ресурс текстовик в 10 гигов, сам BAS будет жесть как долго запускаться, так как он сперва этот файл прочтёт весь.

  • @fox я понял, выход только в использовании базы

  • @Fox

    var lines = RMap("lines")
    var index = lines.indexOf("account1")
    if(index >= 0)
    log("Строка существует")
    else
    log("Строка не существует")
    

    как подключить сюда список? не догоняю

    "lines" - это ресурс список?

  • @bablouser это обьект/ссылка на ресурс.
    lines - имя ресурса

  • @drprime тобишь правельно будет вот так?

    var lines = RMap("C:\10GB.txt")
    var index = lines.indexOf("account1")
    if(index >= 0)
    log("Строка существует")
    else
    log("Строка не существует")
    
  • @BabloUser Нет, создаёшь ресурс из файла
    0_1529774904971_на форум 3.png
    А затем в "выполнить код" указываешь имя этого ресурса

  • @fox да, все разобрался, то что и нужно было, спасибо ребята.
    я по началу создавал ресурс и в него список грузил ) не понял что можно ссылку на ресурс

  • @fox

    var lines = RMap("lines")
    var index = lines.indexOf("account1")
    if(index >= 0)
    log("Строка существует")
    else
    log("Строка не существует")
    

    сделал тест, список с 10 строками отработал нормально Строка существует
    загрузил список 300 мб, 3 ляма строк, пишет Строка не существует

  • @BabloUser indexOf() чувствителен к регистру. Плюс ограничение вроде на ресурсы было в 10 000 строк. Проявлялось при использовании базы, думаю здесь тоже проявилось.

  • @fox не это точно не регистр все строки с маленьких букв, скорое всего ограничение
    ограничение я так понимаю обходить увеличением индекса в цикле
    нужно придумать как после 10 к в глубину уходить
    UPD
    нет не 10 к список 400 к строк нормально сработал
    можно в принципе на этом костыль замутить
    нужно теперь через цикл второй раз запустить этот код но спуститься от 400 к строки чтобы он шерстил, есть мысли как можно реализовать?

    в цикле погонять по 400 к за один проход
    блек листы огромные очень по 10 +к гигов эта фича нужна как воздух
    в принцепе можно порезать листы по строкам и их в цикле теребить, но может есть решение покрасивее...

  • @BabloUser Забудь ты нафиг эти костыли, закидывай в базу. Весить будет меньше и работать будет быстрее. Как ни как базы для этого и придумывали.

  • @support said in Проверить существование в ресурсе, удаление по значению:

    @fox Исправил. Постараюсь побыстрее добавить новое апи в интерфейс и сделать описание всех действий из модуля "Ресурсы"

    Версия BAS 21.0.1, работают все методы, кроме set(index, value). Ресурс в BAS'e меняет значение, но файл остаётся неизменным.

  • 0 Votes
    15 Posts
    2559 Views
  • 0 Votes
    3 Posts
    1031 Views
  • 1 Votes
    2 Posts
    1145 Views
  • 1 Votes
    8 Posts
    4602 Views
  • 2 Votes
    2 Posts
    1587 Views