Если указать файл которого нет, бас автоматом его создаёт.
Как организовать работу с ресурсом файла в БАС
-
Кто-нибудь, объясните как по-нормальному работать с файлами в басе? Я обычно с БД работаю, но тут скрипт заказали и БД принципиально - нет.
В чем проблема:
- Если аккаунт из файла берется с удалением, то он удалится, если в скрипте во время работы произойдет непредвиденная ошибка
- Если берется без удаления, то можно в нужных местах удалять из ресурса действием "Удалить текущий элемент". Но если не нажата галка "Мгновенно", то ничего не удаляется. Если галка нажата, то скрипт жоско зависает на большом количестве потоков и на больших файлах.
По сути без нажатой галки "Мгновенно", если бы работало, то решило бы проблему.
В настройках ресурса "Количество ошибочных использований" больше 1 поставить - тоже нет, т.к. есть сценарии работы, где вызывается Fail и это будет тригерить счетчик вызванных, а не только непредвиденных ошибок.
-
Можешь управлять данными из файлов как хочешь, брать Resource Location и делать свою "раздавалку" данных.

Например, пихать данные из файлов в начале работы скрипта в БД(OnApplicationStart) и уже в скрипте работать с БД, а не с файлами.
Для пользователя будет все как обычно, обычные файлы на входе настроек скрипта.
Разве что надо будет как-то подключить ему БД.
-
@sergerdn так я же написал, что БД не подходит. Чтобы для пользователя было все как обычно, можно разве что скулайт использовать. А он однопоточный плюс глобал лок надо использовать. Это уже из-за скорости не подходит.
Почему удаление из ресурса без галки "Мгновенно" вообще не работает (строка не удаляется из файла даже после остановки скрипта)? Через API баса без вызова синхронизации ресурса это тоже рабоать не будет?
-
@thepappo said in Как организовать работу с ресурсом файла в БАС:
@sergerdn так я же написал, что БД не подходит.
БД будет под капотом скрипта, пользователь туда даже лезть не будет. Это тоже не устраивает его?
Спрашиваю, потому что судя по описанию задачи, кроме БД вариантов нет. Ну или терять в производительности сильно, постоянно перебирая файл при удалении строки, например.
@thepappo said in Как организовать работу с ресурсом файла в БАС:
можно разве что скулайт использовать.
Если хранить данные в RAM у sqlite, это работает почти мгновенно.
Проблема с блокировками в BAS решаема. Я думаю, что надо тестить, но вероятно все будет работать быстро. -
@sergerdn said in Как организовать работу с ресурсом файла в БАС:
Если хранить данные в RAM у sqlite, это работает почти мгновенно.
В памяти не вариант, тогда после перезапуска скрипта данные потеряются. Да и на диске ок, но БД однопоточная и при этом, если лок не использовать, то там все равно состояние гонки будет, проверено. А с локом будут таймауты большие. Если сделать их маленькими, то скрипт зависнет ). Скрипт на запросах, тысячи акков перебирает за минуты, так что тут это критично.
А другие БД использовать - надо СУБД поднимать, не вариант. Надо чтоб нажал и забыл.
-
@thepappo said in Как организовать работу с ресурсом файла в БАС:
А другие БД использовать - надо СУБД поднимать, не вариант. Надо чтоб нажал и забыл.
Подсунуть пользователю инсталлятор, который будет делать все прозрачно для него это вариант?
И БД ставить и скрипт BAS распаковать.
-
Я по сути не про БД хотел спросить, а как с файлами работать в БАС. Как-то же все работают или я чего-то не понимаю?
Вот код удаление из ресурса посмотрел, там какой-то бред
if("accounts" in _R && _R["accounts"]) { _R["accounts"].die() _R["accounts"] = null } if(false) RSync("accounts")Вот из мануала саппорта, если что-то типа такого сделать, то без вызова sync() тоже работать не будет?
var accounts = RMap("accounts"); var index = accounts.indexOf([[ACCOUNT]]); accounts.remove(index) -
@thepappo said in Как организовать работу с ресурсом файла в БАС:
Как-то же все работают или я чего-то не понимаю?
Я использую файлы, только если надо прочитать входные данные или записать данные аккаунтов в результат, например.
А вот если надо изменить запись, удалить, найти ее и так далее - то тут я пас, таких вещей я не делаю.
Если надо делать сложные манипуляции с данными - то это или БД или http API.
-
@thepappo said in Как организовать работу с ресурсом файла в БАС:
Вот из мануала саппорта, если что-то типа такого сделать, то без вызова sync() тоже работать не будет?
Судя по описанию работать будет, но в файл данные не будут записаны, а изменены только в памяти.