Проверка на наличие элемента в ресурсе



  • Здравствуйте. Подскажите, пожалуйста как можно, без костылей, реализовать следующую задачу:

    В OnApplicationStart создаётся ресурс "USERS"
    В функции "Parser" происходит парсинг юзеров и заносится по очереди в переменную "USER". Делается проверка if {{USERS}}.indexOf( [[USER]] ) < 0 --> Добавить переменную USER, в ресурс. Если в ресурсе присутствует хотя бы один элемент, всё отрабатывает, без проблем, но, если ресурс пустой, как, например, в начале скрипта, то останавливается с сообщением "Ожидаю ресурс". Если убрать чекбокс "Ждать появления", то вылезет ошибка "Все данные были отработаны для USERS



  • @azaza777, используйте RMap()



  • @GhostZ , благодарю за ответ.

    Поясню более подробно для тех, кто как и я, не знаком с языками программирования. GhostZ посоветовал использовать Апи для работы с ресурсами, в Басе. Более подробно можно ознакомиться здесь.

    Решение, в моем случае, выглядит следующим образом:

    var lines = RMap("USERS")
    var index = lines.indexOf([[USER]])
    if(index == -1)
       lines.insert([[USER]])
    

    где "USERS" - ресурс со строками, а "USER" - переменная, на наличие которой проверяется ресурс.

    Отдельное спасибо @Rusbear , так как на основе его кода, был сделан этот



  • @azaza777, можно сократить

    var lines = RMap("USERS");
    if(lines.indexOf([[USER]]) < 0){lines.insert([[USER]])};
    


  • @GhostZ , да, так получше, особенно, если учитывать, что я забыл, что нужно делать проверку так же на наличие и в блеклисте и если в обоих ресурсах нет строки из переменной "USER", то только тогда нужно добавить. На примере вашего сокращенного кода добавил проверку и на наличие, в блеклисте:

    var a = RMap("USERS"), b = RMap("BLACKLIST");
    var index = a.indexOf([[USER]])
    if(index == -1) var index = b.indexOf([[USER]])
    if(index == -1) {a.insert([[USER]])}
    


  • @azaza777,

    var a = RMap("USERS");
    var b = RMap("BLACKLIST");
    if(a.indexOf([[USER]]) < 0 && b.indexOf([[USER]]) < 0){
    	a.insert([[USER]])
    };
    


  • @GhostZ , теперь можно двигаться дальше :) Спасибо



  • @azaza777 said in Проверка на наличие элемента в ресурсе:

    @GhostZ , теперь можно двигаться дальше :) Спасибо

    My script use 1 line every few minutes from a txt file called ip.txt . Can I use the code above to check if the line from user.txt exist in the file called blacklist.txt before the script use the line? If the line from from user.txt exist in blacklist.txt then I need to move to the next line and ignore this one.



  • @andreiem , sure, but it needs to be changed a bit.

    var index = 0;
    ip = true;
    while (ip == true)
    {
    var ip = (RMap("BLACKLIST").indexOf(RMap("IPS").at(index)) >= 0)
    
    if (ip == true)
        {
        index = (index+1)
        }
    }
    
    [[IP]] = RMap("IPS").at(index)
    

    Where "IPS" resource with IPs list
    "BLACKLIST" blacklist with IPs

    I'm not coder but it working ;)
    test script
    ips.xml


Log in to reply