Все сразу ?

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8034
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Все сразу ?

Сообщение Игорь Столяров »

Привет всем !

Есть несколько разных файлов с данными, в каждом есстественно есть структура RECORD.
Есть процедура, которая упаковывает эти разношерстные записи и записывает их с указанием типа файла в BLOB поле архивного файла.

Вопрос: Как передать в процедуру структуру RECORD ? Я сейчас указывают тип параметра STRING, вроде работает, но нет ощущения правильности моих действий ...
Может быть кто-нибудь знает как это правильно сделать ?
Заранее спасибо !
Make Clarion Great Again ! 😎
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Re: Все сразу ?

Сообщение Admin »

Кажись так можно

Код: Выделить всё

File      FILE,DRIVER('ASCII'),PRE(File)
Record      RECORD
...
            END
          END


MyProc    PROCEDURE(*File:Record MyRec)
...

MyProc    PROCEDURE(*GROUP MyRec)

...
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 8034
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 28 раз
Поблагодарили: 96 раз

Re: Все сразу ?

Сообщение Игорь Столяров »

Спасибо. Первый вариант сразу не подходит, т.к. я говорил о том, что в процедуру архивации передаются записи разных файлов (с разной длиной и структурой).
Второй интересней (структура RECORD является разновидностью GROUP) - буду пробовать ...
Make Clarion Great Again ! 😎
serg_rivne
Прохожий
Сообщения: 4
Зарегистрирован: 20 Август 2010, 11:38

Re: Все сразу ?

Сообщение serg_rivne »

Не совсем понятен вопрос. Свойство файла FileRef{PROP:Record} возвращает физический адресс буфера файла в памяти. Этот адресс находится в описании заголовка файла.

Код: Выделить всё

Proc              PROCEDURE(FILE FileRef)
Rec    &GROUP
Addr  LONG
Size   LONG
Value ANY 
    CODE
    Rec &= FileRef{PROP:Record}
    Addr = FileRef{PROP:Record}
    !Так же можно определить этот адресс
    Addr = POKE(ADDRESS(FileRef)+2Fh)
    !Размер буфера файла
    Size = POKE(ADDRESS(FileRef)+1Fh)
    !Получить значение N-поля
    Value &= WHAT(Rec,N)
Получения информаци о полях RECORD

Код: Выделить всё

Proc              PROCEDURE(FILE FileRef)
I         BYTE
Label  STRING(20)
    CODE
    LOOP I = 1 TO FileRef{PROP:Fields}
        Label = FileRef{PROP:Label,I} !Имя поля
        .............
    END
Аватара пользователя
WadimZapara
Активист
Сообщения: 181
Зарегистрирован: 11 Июнь 2008, 12:11
Откуда: Тамбов

Re: Все сразу ?

Сообщение WadimZapara »

Замечательная библиотека DinaLib (автор: Олег Руденко)
с нею - всё легко
Компьютер имеет то преимущество перед мозгом, что им пользуются...
nik190994
Активист
Сообщения: 196
Зарегистрирован: 28 Сентябрь 2009, 16:19

Re: Все сразу ?

Сообщение nik190994 »

WadimZapara писал(а):Замечательная библиотека DinaLib (автор: Олег Руденко)
с нею - всё легко
Есть версия для с7.2?
Ответить