Удаление/добавление данных с ресурса вручную. Не по Success или Fail



  • Судя с разъяснение http://community.bablosoft.com/topic/46/возврат-данных-в-файл-при-ошибке-скрипта/4 строка с ресурса удаляется, только когда скрипт успешно завершил свою работу или же достигнут указанный предел ошибочных использований.

    Но сейчас у меня задача удалить строку с ресурса именно в тот момент, когда мне нужно. Притом, чтобы остальные потоки это поняли и не использовали удаленную строку.

    Подробнее:
    Есть ресурс txt файл название email.
    Идет авторизация на сайте, дальше идет цикл проверки строк из ресурса email. Так вот получается цикл внутри потока с использованием данных с ресурса email. И на каждой итерации, при определенном условии, мне нужно удалять только что взятый email из файла (ресурса) да еще и так, чтобы другие потоки, поняли это.
    По сути нужен вызов функции, которая вызывается, когда поток успешно завершается и строка с ресурса удаляется.
    Есть идеи , как сделать ?



  • Удалить ресурс вручную можно выполнив код,

    RS("Название ресурса",false,false)!
    _result().die()
    _R["Название ресурса"] = null

    Остальные потоки перестанут его использовать.
    В дальнейшем сделаю для работы с ресурсами отдельный модуль. Пока так



  • @support хотел бы уточнить, это удалит текущую строку из ресурса (ту что на данный момент использую) и дальше я смогу брать опять строку(следующую) с ресурса ?



  • Немного подправил код. В таком виде можно



  • на данный момент проще просить, чем самому проверять:
    использую код выше, для удаления строки с ресурса. Оно удаляет с копии (которая находится в оперативной памяти). Вопрос: а когда они удалятся из файла на жестком диске? Скорее всего при успешном завершении скрипта. А вот если скрипт Fail сработал, строки удаляются с файла или нет? (мне нужно, чтобы удалялись).

    зы: возможно, мне вообще для этого случая не стоило использовать ресурс, а делать через обычную реалтайм запись/удаление строк из файла. Я так понимаю, разные потоки будут лочить обращение к файлу, как и полагается.



  • каким кодом можно добавить строки в ресурс(не только в копию в оперативной памяти, но и в физический файл., чтобы они вдруг если что не потерялись), так, чтобы это заметили и другие потоки, могли использовать эти данные, когда до низ дойдет очередь ?

    Просто задача такого плана сейчас:
    при определенном условии, нужно взять и добавить 10 строк назад в ресурс. Перед этим мы их удаляли (код выше). Но вот наступила определенная ситуация, и нужно эти данные(10 строк, которые, после взятия из ресурса сохраняются во временный массив(на случай, когда их придется вернуть в ресурс)) вернуть.



  • @out said:

    использую код выше, для удаления строки с ресурса. Оно удаляет с копии (которая находится в оперативной памяти). Вопрос: а когда они удалятся из файла на жестком диске? Скорее всего при успешном завершении скрипта. А вот если скрипт Fail сработал, строки удаляются с файла или нет? (мне нужно, чтобы удалялись).

    либо по завершении скрипта, либо через некоторое время.

    зы: возможно, мне вообще для этого случая не стоило использовать ресурс, а делать через обычную реалтайм запись/удаление строк из файла. Я так понимаю, разные потоки будут лочить обращение к файлу, как и полагается.

    Да будут, как вариант.



  • @out said:

    каким кодом можно добавить строки в ресурс(не только в копию в оперативной памяти, но и в физический файл., чтобы они вдруг если что не потерялись), так, чтобы это заметили и другие потоки, могли использовать эти данные, когда до низ дойдет очередь ?

    Просто задача такого плана сейчас:
    при определенном условии, нужно взять и добавить 10 строк назад в ресурс. Перед этим мы их удаляли (код выше). Но вот наступила определенная ситуация, и нужно эти данные(10 строк, которые, после взятия из ресурса сохраняются во временный массив(на случай, когда их придется вернуть в ресурс)) вернуть.

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



  • @support said:

    @out said:

    каким кодом можно добавить строки в ресурс(не только в копию в оперативной памяти, но и в физический файл., чтобы они вдруг если что не потерялись), так, чтобы это заметили и другие потоки, могли использовать эти данные, когда до низ дойдет очередь ?

    Просто задача такого плана сейчас:
    при определенном условии, нужно взять и добавить 10 строк назад в ресурс. Перед этим мы их удаляли (код выше). Но вот наступила определенная ситуация, и нужно эти данные(10 строк, которые, после взятия из ресурса сохраняются во временный массив(на случай, когда их придется вернуть в ресурс)) вернуть.

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

    попробую сперва заменить работу с ресурсом на

    зы: возможно, мне вообще для этого случая не стоило использовать ресурс, а делать через обычную реалтайм запись/удаление строк из файла. Я так понимаю, разные потоки будут лочить обращение к файлу, как и полагается.

    если будет нормально в многопотоке, то в принципе и вопрос решен.



  • Все действия в БАС являются потокобезопасными, исключение составляют асинхронные модули, написанные на с++, которые используют общие ресурсы, и в которых создатели модулей не позаботились о синхронизации.

    Что касается добавления в ресурс, то если есть необходимость, могу реализовать в течении 1-2 дней.



  • ну текущую задачу я как-то может решу без ресурса, а напрямую работая с файлом. А вообще , на будущее такой функционал конечно же нужен: добавление строки в конец/начало ресурса, тоже самое и с получением строки.. На мой взгляд нужно чучуть добавить гибкости/возможности взаимодействовать с ресурсами уже в процессе работы внутри скрипта.

    UP: пытался решить этот момент, получился замкнутый круг..
    Удаляю строку с ресурса кодом выше, но с файла она не удаляется. Удаляется только тогда , когда стоит галка на ресурсе "Удалять строки".
    Но если я ее ставлю, то тогда строки уже автоматом удаляются с ресурса, сразу после взятия их с галкой notreuse ({{inps_profile_pars|notreuse}}).
    такой вот затык(
    А нужно мне всего лишь было: брать строку из файла, после взятия чтобы она сразу не удалялась, а удалялась только после использования кода
    RS("Название ресурса",false,false)!
    _result().die()
    _R["Название ресурса"] = null

    Короче говоря, нужна обычная работа с файлами (списками). Указали путь к файлу, указали что это список, дальше берем и работаем построчно с этим списком, взять строку, с удалением, без. Синхронизировать с локальным файлом или нет. и т.д.
    Т.к. с ресурсами не удается работать гибко внутри одного потока.



  • @out said:

    Но если я ее ставлю, то тогда строки уже автоматом удаляются с ресурса, сразу после взятия их с галкой notreuse

    Чтобы такого не было нужно поставить количество успехов и неудач больше 1. По умолчанию они стоят в 1.

    Короче говоря, нужна обычная работа с файлами (списками). Указали путь к файлу, указали что это список, дальше берем и работаем построчно с этим списком, взять строку, с удалением, без. Синхронизировать с локальным файлом или нет. и т.д.

    В БАС строки удаляются автоматически при наступлении допустимого количества неудач или успехов. Если нужно самостоятельно удалять строки, можно сделать таким образом - поставить галку удалять строки, выставить количество неудач и успехов в 10000, а при необходимости удалить строку вызывать код выше.



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

    0_1466367470707_ResourceModule.png

    0_1466367581194_RuAddElemetInterface.png

    Также появилась возможность, чтобы пользователь задавал путь к файлу с результатами.

    http://wiki.bablosoft.com/doku.php?id=ru:how_to_let_user_to_choose_output_file_name

    Скачать новую версию можно тут
    https://bablosoft.com/distr/BrowserAutomationStudioDevelopment/11.4.0/BrowserAutomationStudioInstallAllInOne.exe



  • спасибо. такими темпами скоро можно будет выходить на конкурентов на платной основе )
    предлагаю переименовать "добавить в базу\файл мгновенно" на "добавить мгновенно"
    "только добавить в базу\файл" на "только добавить"

    это будет подразумевать "добавить в ресурс". что логично, т.к. работа идет с ресурсом. А файл это или база, дело "десятое", т.к. зависит от того как выбрал юзер ресурс, как базу или как файл.


Log in to reply