Обсуждение: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 - для меня не актуально.
      >> Ответить
    • Развернуть Метод Prev виртуальной таблицы ( Волошин Дмитрий  15.08.2005 12:42 )
      0(0)
      Если нахожусь на первой записи в таблице и делаю prev, то этот метод выдает true хотя должен по идее false.
      >> Ответить
    • Развернуть Кстати, о 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.

      >> Ответить
    • Развернуть Исправлена ошибка в методе 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)");

      >> Ответить