copy-lob

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

copy-lob

Сообщение udg » 21 сен 2016, 10:38

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

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 одинаковый набор данных. Что я делаю не так?

Аватара пользователя
dmi
Старожил
Сообщения: 1523
Зарегистрирован: 27 сен 2001, 03:00
Откуда: Москва
Контактная информация:

Re: copy-lob

Сообщение dmi » 21 сен 2016, 13:36

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

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

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

Re: copy-lob

Сообщение udg » 21 сен 2016, 15:10

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

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

Re: copy-lob

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

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

copy-lob from file s-file for 2048 to dirtyData no-error.

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

disrtyData longchar.

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

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

Re: copy-lob

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

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

Аватара пользователя
Arelav
Администратор
Сообщения: 1880
Зарегистрирован: 25 мар 2005, 17:05
Откуда: Progress Technologies
Контактная информация:

Re: copy-lob

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

сама по себе ошибка 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.

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

Re: copy-lob

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

Код подает на строчке

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

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 блоками, но не получается так.

Аватара пользователя
Arelav
Администратор
Сообщения: 1880
Зарегистрирован: 25 мар 2005, 17:05
Откуда: Progress Technologies
Контактная информация:

Re: copy-lob

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

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

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

Re: copy-lob

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

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

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

Re: copy-lob

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

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