[Logo]
LUA Форум
  [Search] Поиск   [Recent Topics] Последние темы   [Hottest Topics] Горячие темы   [Members]  Список участников   [Groups] На главную страницу 
[Register] Регистрация / 
[Login] Вход 
Сообщения, отправленные пользователем: Berkut
Индекс форума » Профиль для Berkut » Сообщения, отправленные пользователем Berkut
Автор Сообщение
Вопрос решён.
Есть функция MoveUp, выполняющаяся в вышестоящей программе. Как аргумент туда входит sFileName - строковое значение с именем файла, над которым нужно провести действие (только имя, без пути). Как передать в эту функцию имя файла, из которого она вызывается? Сейчас делаю это напрямую, тупо прописав имя ручками. Очень не хочется, чтобы скрипт становился неработоспособным при смене имени файла.
smz wrote:
1. К сожалению, приведенный тобой кусок исковерканной таблицы не производит впечатления скопированного, а скорее записанного по памяти. Пожалуйста, скопируй кусок повреждённой таблицы, тогда можно будет говорить конкретнее.

smz wrote:Ну, похоже, "r+" и есть это слабое место. Используй "a".

Опыт показал, что пробоина в самой функции. Смена режима на "а" или "а+" даёт тот же результат. При каком-то условии таблица коверкается.
Попробую. Вот только так и не понял, в чём кривизна... Ведь в подавляющем большинстве случаев функция работает нормально.
Можно ли как-то оптимизировать такую конструкцию для сохранения многоуровневых таблиц?



Проблема в том, что при некоторых условиях (хоть убейте, так и не смог выяснить при каких конкретно) таблица сохраняется в искажённом виде:



В случае, если в функции WriteTable я использую w вместо r+, то никаких искажений не происходит. Но суть в том, что мне необходимо сохранять в этом же файле и другие данные, в таблицу не входящие.
Если в коде есть "слабое" место, укажите мне на него пожалуйста.
z00n wrote:Я не знаю, попробуйте локализовать проблему или дайте компилирующися кусок кода с проблемой.

Да уже не актуально, т.к. после явного объявления открытия файла, он прекрасно удаляется.
z00n wrote:Дело в том, что файл уже открыт, раз вы не можете его удалить. Найдите где в вашей программе вы открываете файл и не закрываете его. Если вам нужно держать файлы открытыми - заведите глобальную lookup-table :: {filename->filehandle} c weak value. Это позволит закрывать файл по имени перед удалением.

Проблема в том, что исходя из кода программы, он должен быть закрыт. В функции сохранения сообщения файл закрывается. При входе пользователю выдаются сообщения из файла, но и там файл закрывается. Если я просто пытался закрыть файл, отладчик выдаёт, что не может найти открытый файл (естественно, я пытаюсь закрыть именно тот файл, который открывал через другие функции).
z00n wrote:
Мне кажется проблема в том, что вы не закрываете файл перед тем как пытаетесь его удалить.
Попробуйте так:



Сработало. Только для начала файл открыть нужно было
Не пойму, в чём суть проблемы. Есть вот такой кусок кода с обработкой команды:


При сработке команды должен удаляться файл с сообщениями из определённой папки, имеющий название, совпадающее с ником того, кто активизировал команду.
Проблема в том, что если файл с сообщениями был создан в ту же сессию, что и активирована команда его удаления, я получаю сообщение об очистке (т.е. формально os.execute("del "..OffLineDir..user.sName..".msg") выполняется), но файл в папке остаётся. Как я понимаю, он удаляется и создаётся заново. Если же между сохранением файла и активацией команды была перезагрузка хоста, то файл удаляется прекрасно.

Вот функция сохранения в файл:

Здесь user - таблица с данными пользователя, сохраняющего сообщение, aim - адресат, msg - сообщение.

Каким образом мне можно очистить почту, не перезапуская хост?
Спасибо, попробую.
Суть вопроса следующая:

Есть некая таблица Table={1,0,0,1,function() Time() end}
Первые 4 элемента - разные опции, 5-ый - функция, которую нужно выполнить при некотором условии.



OnTimer() - это функция, реализующая таймер как таковой. При срабатывании необходимо проверить некое условие, и в случае выполнения запустить функцию Table[5]. Если эта функция возвращает true, то выдаётся определённый результат.
Интересует именно тот кусок кода, где я функцию обозначил как <Table[5]>. Не знаю, как описать инициализацию функции из таблицы и как правильно проверить, что она возвращает true. Перепробовал несколько вариантов. Ни при одном из них ошибок синтаксиса не получаю, но функция просто не работает.
Почему функцию нужно запихнуть именно в таблицу. Эта таблица - элемент внешней, которая собирает в себе описания нескольких таймеров. В других просто реализован счётчик, и они прекрасно работают. Здесь же по таймеру нужно выполнить функцию и результата никакого.
Вроде... Хотя мой комп не показатель. Связь с Москвой последнюю неделю не ахти. Скорость прыгает от 20 до 800 КБ/с. Соответственно вчера мыло грузилось с полминуты, сегодня вылетело за пару секунд.
Вопрос, а нужны ли этому форумы разные навороты? Должны чётко работать основные модули, включая поиск. Всё остальное, ИМХО, лишне.
Есть вот такой маленький скриптик:


Действует очень просто. По запросу обращается к библиотеке WSA. В зависимости от команды возвращает host по IP или пытается соединиться с определённым портом удалённого адреса.
Сам скрипт работает нормально. Но вот в чём загвоздка. Если соответствующий адрес не найден или IP не разрешается до host, происходит задержка отклика примерно на 5-10 секунд. Как понимаю, это связано с тем, что библиотека инициирует соединение в неком временном промежутке и выдаёт ошибку только по его окончании.
Вопрос, можно ли не меняя содержания библиотеки, снизить время отклика? Если да, то как?
 
Индекс форума » Профиль для Berkut » Сообщения, отправленные пользователем Berkut
Перейти:   
Powered by JForum 2.1.8 © JForum Team