Обсуждение:LOM.d32 - Библиотека дополнительных классов для RSL
0 (0)
Обсуждение:LOM.d32 - Библиотека дополнительных классов для RSL ( Обсуждение примера 10.06.2005 10:07 )
0(0)Библиотека дополнительных классов для RSL.
1. Виртуальная таблица
2. Сравнение строк с шаблоном
3. Копирование файлов по протоколу FTP
Посмотреть пример
>> ОтветитьВиртуальная таблица - это интересно... ( Sandy 10.06.2005 10:57 )
0(0)...надо будет попробовать.
Про шаблон поподробнее: символы-заменители, синтаксис?
FTP - для меня не актуально.
>> ОтветитьRe: Виртуальная таблица - это интересно... ( moleg 10.06.2005 11:01 )
0(0)Пример использования шаблонов можно посмотреть в файле readme.txt, который идет вместе с примером.
>> Ответить
Метод Prev виртуальной таблицы ( Волошин Дмитрий 15.08.2005 12:42 )
0(0)Если нахожусь на первой записи в таблице и делаю prev, то этот метод выдает true хотя должен по идее false.
>> ОтветитьRe: Метод Prev виртуальной таблицы ( moleg 15.08.2005 12:44 )
0(0)
Кстати, о rewind'e... ( sokols 16.08.2005 10:36 )
0(0)Берем простейший файл (пустой, с записями - неважно):
Структура файла: test.dbt (ttt )
--------------------------------------------------------------------------
| Имя поля | Тип |Длина|Смещ.| Примечание |
|-----------------------|-------|-----|-----|----------------------------|
Oper LONG 4 0
------------------------------------------------------------------------
4
Ключи файла
--------------------------------------------------------------------------
|Номер| Имя поля | Флаги | Тип |Длина|Смещ.|Примечание |
|-----|-----------------------|----------|-------|-----|-----|-----------|
0 Oper DM E INTEGER 4 0
Выполняем макрос из оболочки (Version 1011)
file t(test) write;
t.oper = 9999;
insert(t);
rewind(t); // Вот этот оператор должен встать на неопределенную позицию
t.oper = 8888;
update(t); // тем не менее происходит обновление только что вставленной записи
Кроме того, rewind не возвращает значения.
>> ОтветитьRe: Кстати, о rewind'e... ( moleg 16.08.2005 10:51 )
0(0)А причем тут виртуальная таблица?
>> ОтветитьДа так, музыкой навеяло... ( sokols 16.08.2005 10:59 )
0(0)"2. После вызова метода sort таблицы, вызывается rewind."
Не дай бог после этого update написать, концов потом не найдешь...
>> ОтветитьВ ситуации, когда таблица установлена в rewind ... ( moleg 16.08.2005 11:12 )
0(0)Что касаемо виртуальной таблицы:
когда таблица установлена в rewind, метод Update возвращает false и соответственно обновление какой либо записи не происходит.
Сам только что проверял ;-)
>> ОтветитьНе может не радовать... ( sokols 16.08.2005 11:49 )
0(0)А у нас один товарисч наступил на грабли, работая с обычным btriev'овским файлом - забыл после rewind'a hext написать :-; Флейм был с поддержкой в I-Support'e. Они утверждали, что rewind так и должен работать :-)
>> Ответить
Обновление от 21.09.2005 ( moleg 21.09.2005 09:39 )
0(0)Наверное последнее обновление этой библиотеки в моем исполнении, т.к. изменилось направление деятельности. Если кому нужен исходник могу скинуть на email.
>> ОтветитьЕсли не трудно скинь плз. мне! ( EpBuLaT 22.09.2005 06:20 )
0(0)Not specified
>> Ответить
Исправлена ошибка в методе SEEK вирт. таблицы. ( moleg 25.10.2005 11:59 )
0(0)Ошибка: при поиске с текущей записи, если таблица установлена в Rewind, программа аварийно вылетает.
>> ОтветитьОбновление: Существенно доработан класс для работы с шаблонами. ( moleg 18.11.2005 10:39 )
0(0)----------------------------------------------------------------------- Класс для работы с шаблонами TLomTmpl() ----------------------------------------------------------------------- Свойства: Separator - признак учета разделителя в шаблоне(;). По умолчанию равен true. Используется для метода Compare Метод для сравнения строк: Compare(Строка:sting,Шаблон:string) - сравнивает строку с шаблоном. Если строка соответсвует шаблону, то возвращает true, иначе false. Пример: Obj.compare("4550181000000000111","455?1*") Obj.compare("4550181000000000111","455?1*;455?2*"); Методы для сравнения счетов с установленным шаблоном: SetTmplAcc(Строка:string) - устанавливает шаблон для работы со счетами по первым символам, понимает знаки "!", ":", "?",";" и ",". !!! Не поддерживает знак "*" !!! Пример: Obj.GetTmplAcc("450:457(02,04:06);!45305"); В данном примере указан шаблон для балансовых счетов : 45002, 45004, 45005, 45006, 45102 и т.д., исключая балансовый счет 45305. CompareAcc(Строка:string) - метод сравнивает строку с шаблоном указанным функцией GetTmplAcc(Строка:string). Если строка соответсвует шаблону, то возвращает true, иначе false. Пример: import lom; file acc(account); ob = TLomTmpl; ob.SetTmplAcc("450:457(02,04:06);!45305"); InitProgress(Nrecords(acc),"","Просмотр лицевых счетов"); rewind(acc); i = 0; while(next(acc)) i = i + 1; UseProgress(i); if(ob.CompareAcc(acc.Account)) println(acc.Account); end; end; RemProgress(); Методы работы с формулами-шаблонами для счетов: Допускается работа с формулами типа: 1. "455(01:02) + 454(01,02,03)/423*422"; 2. "455(01:02) + Если(455>454, Число(1), Число(2))"; Для работы с формулой необходимо: 1. Установить формулу методом SetTmplAcc(Формула:string); 2. Заполнить значения из формулы с помощью методов NextTmpl(Строка:string) и SetValue(val); 3. Получить результат методом GetValue - возвращает значение типа V_DOUBLE; SetTmplAcc(Строка:string) - устанавливает формулу. NextTmpl(Формула:string) - переход к следующему элементу формулы, при успешном выполнении вернёт true и установит значение Формула равным этому элементу. SetValue(val) - устанавливает на место текщего элемента значение val. Val может быть следующих типов : V_DOUBLE, V_DOUBLEL, V_MONEY, V_MONEYL, V_INTEGER. При установке, значение преобразуется в тип V_DOUBLE. GetValue() - возвращает результат формулы. GetFormula() - возвращает формулу. Если метод вызван после GetValue(), то возвращает формулу где все элементы заменены на их результат. Refresh() - возвращает позицию для NextTmpl в начало формулы. В формулах можно использовать функцию ЕСЛИ(IFF), которая аналогична такой же в MS EXCEL. Для ввода в формулу любого не изменяемого значения предусмотрена функция ЧИСЛО(VAL). Пример: import lom, BankInter; file acc(account); var МежфилРасчетыПасс = "ЕСЛИ((303(02,04)-303(01,03,05))<ЧИСЛО(0),303(01,03,05),ЧИСЛО(0))"; var ob = TLomTmpl, CurAcc, stat, Result; ob.SetTmplAcc(МежфилРасчетыПасс); while(ob.NextTmpl(CurAcc)) Result = $0.00; acc.Account = CurAcc; stat = GetGE(acc); while(stat and ob.Compare(acc.account,CurAcc+"*")) Result = Result + RestA(acc.account); stat = Next(acc); end; ob.SetValue(Result); end; println(ob.GetValue); println(ob.GetFormula);
>> ОтветитьВыложил обновленную версию ( moleg 22.02.2006 09:45 )
0(0)Добавил в TLomTmpl возможность передавать формулу или шаблон для счетов в момент создания объекта:
obj = TLomTmpl("455(01,04,05)");
>> Ответить