SAS sftp отправляет файл с разделителем LF вместо CRLF - PullRequest
0 голосов
/ 05 ноября 2018

Я совершенно новичок в программировании на SAS, поэтому прошу прощения, если вопрос очень простой. Я пытаюсь отправить файл с помощью SAS SFTP из Linux на Windows Server. Я могу передать файл, но конечный файл имеет разделитель строк LF, в то время как наша работа ожидает, что файл будет иметь разделитель CRLF. Я попытался использовать параметр termstr, но он завершился ошибкой «Недопустимый параметр termstr». Ниже мой код

filename out-file sftp 'file.txt' cd='/project/dir' 
         host='hostname' recfm=v
         user=user1;
data _null_;
   file out-file TERMSTR=crlf;
   do i=1 to i=10;
      put i=;
   end;
run;

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Ваша программа использует недопустимое значение для fileref. Вы не можете использовать дефис в имени SAS.

Вы можете использовать опцию TERMSTR = в операторе FILENAME или FILE, чтобы изменить конец строки символов.

Я думал, что SFTP всегда перемещал файлы как двоичные файлы. Вы можете попробовать изменить опцию SFTP, чтобы убедиться, что она делает это. Попробуйте удалить параметр recfm=v.

Примечание. Текстовые файлы содержат символы конца строки, а не разделители записей. Если вы пишете какой-то проприетарный двоичный формат файла, вы можете считать символы между строками данных разделителем записей, но это может привести к путанице, если вы будете думать о том, что строки в текстовых файлах разделены, а не завершены.

0 голосов
/ 05 ноября 2018

TERMSTR - это опция для оператора INFILE, соответствующей опции для оператора FILE нет.

Попробуйте использовать PUT с шестнадцатеричной строкой и удерживаемым выводом (@)

PUT I= '0d0a'x @;

Из документации SAS

Задание шестнадцатеричных значений

Шестнадцатеричные значения для (системных) значений параметров должны начинаться с цифры (0–9) и должны сопровождаться X. Например, следующий оператор OPTIONS устанавливает размер строки равным 160 с использованием шестнадцатеричного числа:

options linesize=0a0x;

Назначение символов для шестнадцатеричных чисел требует кавычек:

options formchar='a0'x;

Дополнительное чтение в Константы SAS в выражениях покажут

Символьные константы, выраженные в шестнадцатеричной записи

Символьные константы SAS могут быть выражены в шестнадцатеричном формате. Символьная шестнадцатеричная константа - это строка из четного числа шестнадцатеричных символов, заключенная в одинарные или двойные кавычки, за которыми сразу следует X

и

Числовые константы, выраженные в шестнадцатеричной записи

Числовая константа, выраженная в виде шестнадцатеричного значения, начинается с числовой цифры (обычно 0), может сопровождаться более шестнадцатеричными символами и заканчивается буквой X. Константа может содержать до 16 допустимых шестнадцатеричных символов (0 до 9, от А до F)

...