Регистрация

copy-lob

Обсуждение вопросов по разработке программ в среде продуктов копорации "Progress Software"
Старожил
Сообщения: 34
Зарегистрирован: Чт ноя 22, 2012 8:20 am

copy-lob

Сообщение udg » Ср сен 21, 2016 11:38 am

Доброго времени суток!

Progress 10.2B.
Код: Выделить всё
copy-lob from file s-file starting at 1 for 1024 to data.
COPY-LOB FROM data TO FILE "source1.txt".
copy-lob from file s-file starting at 1024 for 1024 to data.
COPY-LOB FROM data TO FILE "source2.txt".


s-file = текстовый файл размером овер 20 мб.. Хочу считать первые 1024 символа в 1 файл, другие 1024 в другой файл. Однако в обоих файлах source одинаковый набор данных. Что я делаю не так?

Старожил
Аватара пользователя
Сообщения: 1523
Зарегистрирован: Чт сен 27, 2001 4:00 am
Откуда: Москва

Re: copy-lob

Сообщение dmi » Ср сен 21, 2016 2:36 pm

У тебя опечатка - ведь всё должно идти в одном COPY-LOB - где описано FROM, TO и сколько чего.
/dmi

http://pro4gl.ru - 4gl блог

Старожил
Сообщения: 34
Зарегистрирован: Чт ноя 22, 2012 8:20 am

Re: copy-lob

Сообщение udg » Ср сен 21, 2016 4:10 pm

Да разобрался, спасибо

Старожил
Сообщения: 34
Зарегистрирован: Чт ноя 22, 2012 8:20 am

Re: copy-lob

Сообщение udg » Пн окт 03, 2016 3:10 pm

Код: Выделить всё
copy-lob from file s-file for 2048 to dirtyData no-error.

Файл 2гб, в ошибку пишет
/LSOp_2587.xml' must be a regular file. (11293)

disrtyData longchar.

Большой файл, поэтому ошибка ?

Старожил
Сообщения: 34
Зарегистрирован: Чт ноя 22, 2012 8:20 am

Re: copy-lob

Сообщение udg » Пн окт 03, 2016 3:51 pm

Да 1 GB ограничение для Longchar и прочих "резиновых" типов. Как можно считать частями тогда? Сейчас даже указав размер считываемый 2048, выходит ошибка

Администратор
Аватара пользователя
Сообщения: 1873
Зарегистрирован: Пт мар 25, 2005 6:05 pm
Откуда: Progress Technologies

Re: copy-lob

Сообщение Arelav » Пн окт 03, 2016 6:39 pm

сама по себе ошибка 11293 странная какая-то .
путь к файлу в s-file точно правильно прописан?
какая будет без no-error в copy-lob.

На счёт по частям.
Вот нашёл пример для копирования больших файлов частями через memptr, источник http://knowledgebase.progress.com/artic ... /000050040
возможно этот код наведёт на мысль
Код: Выделить всё
ETIME(TRUE).

&GLOBAL-DEFINE CHUNK_SIZE 500000000

DEFINE VARIABLE mVariableName   AS MEMPTR      NO-UNDO.
DEFINE VARIABLE cSourceFileName AS CHARACTER   NO-UNDO.
DEFINE VARIABLE cTargetFilename AS CHARACTER   NO-UNDO.
DEFINE VARIABLE i64FileSize     AS INT64       NO-UNDO.
DEFINE VARIABLE i64Position     AS INT64       NO-UNDO.
DEFINE VARIABLE i64Length     AS INT64       NO-UNDO.

ASSIGN
    cSourceFileName = "Source.txt"
    cTargetFilename = "Target.txt"
    FILE-INFO:FILENAME  = cSourceFileName
    i64FileSize = FILE-INFO:FILE-SIZE.

ASSIGN
    i64Position = 1
    i64Length = MINIMUM(i64FileSize, {&CHUNK_SIZE}).

DO WHILE i64Position <= i64FileSize:
    SET-SIZE(mVariableName) = i64Length.
    COPY-LOB FROM FILE cSourceFileName STARTING AT i64Position FOR i64Length TO mVariableName NO-CONVERT.

    IF i64Position = 1 THEN
        COPY-LOB FROM mVariableName TO FILE cTargetFilename NO-CONVERT.
    ELSE
        COPY-LOB FROM mVariableName TO FILE cTargetFilename APPEND NO-CONVERT.
   
    SET-SIZE(mVariableName) = 0.

    ASSIGN
        i64Position = i64Position + i64Length
        i64Length = MINIMUM((i64FileSize - i64Position) + 1, {&CHUNK_SIZE}).
END.

MESSAGE ETIME / 1000
    VIEW-AS ALERT-BOX INFO BUTTONS OK.

QUIT.

Старожил
Сообщения: 34
Зарегистрирован: Чт ноя 22, 2012 8:20 am

Re: copy-lob

Сообщение udg » Ср окт 05, 2016 4:08 pm

Код подает на строчке
Код: Выделить всё
COPY-LOB FROM FILE cSourceFileName STARTING AT i64Position FOR i64Length TO mVariableName NO-CONVERT.

i64Position = 1, i64Length = 2048 (выставил руками).
Если размер файла более 1 ГБ (2.48 у меня) пишет что must be regular file. Менее то норм. Склоняюсь к мысли что copy-lob не поможет. Возможно как то импорт stream использовать, какие есть best practics при работе с большими файлами? Первоначальная мысль была, считывать copy-lob блоками, но не получается так.

Администратор
Аватара пользователя
Сообщения: 1873
Зарегистрирован: Пт мар 25, 2005 6:05 pm
Откуда: Progress Technologies

Re: copy-lob

Сообщение Arelav » Пн окт 10, 2016 1:27 pm

Попробуйте задать вопрос в Progress Community, в разделе OpenEdge Development:
https://community.progress.com/communit ... evelopment

Старожил
Аватара пользователя
Сообщения: 2871
Зарегистрирован: Ср май 12, 2004 6:03 pm
Откуда: Питер

Re: copy-lob

Сообщение George » Вт окт 11, 2016 2:20 pm

Может такой вариант подойдет?:
https://community.progress.com/communit ... 5183/55684

Старожил
Сообщения: 34
Зарегистрирован: Чт ноя 22, 2012 8:20 am

Re: copy-lob

Сообщение udg » Пт окт 14, 2016 2:58 pm

Благодарю, топик помог

Вернуться в PROGRESS - 4GL - ПРОГРАММИРОВАНИЕ

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5