Вы на правильном пути с несколькими небольшими проблемами синтаксиса.
Это работает для меня:
define variable lcResp as longchar no-undo.
define variable cFileLine as character no-undo.
define stream logStream.
input stream logStream through "curl https://stackoverflow.com".
read_loop:
repeat:
import stream logStream unformatted cFileLine.
assign lcResp = lcResp + cFileLine + "~n".
end.
input stream logStream close.
message "[OUT] " length( lcResp ) view-as alert-box.
COPY-LOB lcResp to file "zzz".
Оператор MESSAGE не может вывести lcResp, если он превышает примерно 30000 символов. Я использовал length (lcResp), чтобы показать, что я получил данные.
Операторы вывода, такие как MESSAGE, PUT или EXPORT, не работают с данными longchar. Вам нужно использовать COPY-LOB для непосредственного чтения или записи longchar.
Также - будьте осторожны с обработкой новых строк или их отсутствием. ВХОД, который не завершается символом новой строки, будет потерян ИМПОРТОМ в цикле REPEAT. Я обычно использую что-то еще, чтобы избежать этого:
define variable lcResp as longchar no-undo.
define variable cFileLine as character no-undo.
define stream logStream.
input stream logStream through "curl https://stackoverflow.com".
read_loop: do while true:
cFileLine = ?.
do on endkey undo, leave
on error undo, leave:
import stream logStream unformatted cFileLine.
end.
if cFileLine = ? then
leave read_loop.
else
lcResp = lcResp + cFileLine + chr(13) + chr(10).
end.
input stream logStream close.
message "[OUT] " length( lcResp ) view-as alert-box.
COPY-LOB lcResp to file "zzz".
Бизнес "chr (13) + chr (10)" может быть важен, если ваши переводы строк должны иметь определенный формат.