Как удалить пустые строки при экспорте текстовых файлов? - PullRequest
0 голосов
/ 01 июня 2019

Я написал программу для создания формата текстового файла, но у меня возникла проблема с созданием последней пустой строки. Таким образом, программа, которая используется для генерирования текстового файла, выдает ошибку для пустой строки. Как вы знаете, мы можем удалить пустую строку при разборе, но наш клиент говорит, что нет необходимости создавать пустые строки при создании текстового файла. Поэтому, пожалуйста, помогите этому делу для создания пустых строк. Позвольте мне поделиться примером запроса для вашей справки

DEFINE VARIABLE cExportData AS CHARACTER NO-UNDO FORMAT 'X(250)'.
DEFINE VARIABLE cPath AS CHARACTER NO-UNDO.
DEFINE VARIABLE cExt  AS CHARACTER NO-UNDO.
DEFINE VARIABLE cSFTL AS CHARACTER NO-UNDO FORMAT 'X(150)'.
DEFINE VARIABLE cMessageDateTime AS CHARACTER NO-UNDO.

ASSIGN
      cPath  = "R:\Downloads\progress\".
      cExt   = ".Txt".
      cMessageDateTime = "123456789".



OUTPUT TO VALUE (cPath + cMessageDateTime + STRING(MTIME) + cExt ).   


     cExportData = "Data1" + CHR(10) + "Data2" + CHR(10) + "Data3" + CHR(10) + "END.".
     MESSAGE  cExportData.

OUTPUT TO CLOSE.

Поэтому, когда я вижу экспортированный текстовый файл с помощью NOtepad ++, я мог видеть первые 3 для Data1, Data2, Data3, но 4-я строка создается с пустой. Поэтому мне нужно прекратить создание 4-й строки.

1 Ответ

4 голосов
/ 01 июня 2019

СООБЩЕНИЕ обычно не то, что вы хотите использовать для вывода в файл, оно имеет много дополнительных поведений, специфичных для взаимодействия с пользователями в контексте предоставления сообщений об ошибках и т. Д. PUT обычно больше подходит для записи файлов. Встраивание CHR (10) также не очень хорошая идея - это очень специфичный для ОС терминатор строки. CHR (10) - это новая строка в стиле Unix, но вы явно работаете в Windows (которая использует CHR (10) + CHR (13).

Я мог бы переписать ваш код следующим образом:

DEFINE VARIABLE cExportData AS CHARACTER NO-UNDO FORMAT 'X(250)'.
DEFINE VARIABLE cPath AS CHARACTER NO-UNDO.
DEFINE VARIABLE cExt  AS CHARACTER NO-UNDO.
DEFINE VARIABLE cSFTL AS CHARACTER NO-UNDO FORMAT 'X(150)'.
DEFINE VARIABLE cMessageDateTime AS CHARACTER NO-UNDO.

/* the "." that you had at the ends of the ASSIGN sub statements
 * is turning it into 3 distinct statements, not one as your 
 * indentation shows
 */

ASSIGN
  cPath  = "R:\Downloads\progress\" 
  cExt   = ".Txt"
  cMessageDateTime = "123456789"
. /* end the ASSIGN statement */

/* if you are using MTIME because you imagine it will make your
 * filename unique then you are mistaken, on a multi-user or 
 * networked system it is trivial for 2 processes to create files
 * at the very same MTIME
 */

OUTPUT TO VALUE (cPath + cMessageDateTime + STRING(MTIME) + cExt ).   

/* usually some kind of looping structure would output each line
 * building the whole output by concatenating into a string will
 * eventually exhaust memory.
 */ 

put unformatted "Data1" skip "Data2" skip "Data3" skip "End." skip.

/* the final SKIP might not be needed - it is unclear to me
 * if that is a problem for your client
 */

/* as originally written this creates
 * an empty file called "CLOSE"
 */

OUTPUT /*** TO ***/ CLOSE.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...