Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Новый топик    Ответить
 Как удалять пустую строку  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2070
Добрый день.
Есть надобность записать .html (и не только)
в виде рутин под COS (GT.M).
При открытие таких файлов, нередко попадаются пустые строки.
Т.е. при записи такой рутины мы получим конец,
где встретится первая пустая строка ...
Как можно удалять пустую строку при открытие
текстового файла средствами COS ?
CatFile(cmd,Ret,i,Er)
 
io,line,p
 
;s Er="test"
 
io=$io
 s 
p=cmd
 
p:(COMMAND=cmd:READONLY)::"PIPE"
 
files
 
p
 
For i=1:1 files(iRet(i)=files(i)_$c(13,10) q:$zeof
 c 
p
 
io
 
q
 
;
Спасибо
6 сен 16, 10:40    [19631769]     Ответить | Цитировать Сообщить модератору
 Re: Как удалять пустую строку  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1565
Valeriu,

как вы, конечно, знаете, пустая строка не является концом программы GT.M. Не вижу, какие проблемы она может там вызывать.

Если вы формируете *.ro-файлы для Cache (для последующего импорта с помощью утилиты %RI или её аналогов), пустые строки надо заменить на строки, состоящие из одного символа "." (точка).
6 сен 16, 11:38    [19632083]     Ответить | Цитировать Сообщить модератору
 Re: Как удалять пустую строку  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1565
Чуть не забыл ответить на заданный вопрос :)

Отвечу вопросом: разве пустая строка, прочитанная из файла, открытого как обычный "STREAM", не будет иметь $length(строка)=0?
6 сен 16, 12:19    [19632311]     Ответить | Цитировать Сообщить модератору
 Re: Как удалять пустую строку  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2070
Alexey Maslov,
Вы правы, я неправильно делаю,
но мне нужно записать то что открыл.
А открываю я с пустыми строками.
Записываю так, используя в качестве разделителя перевод строки
Здесь нужно посмотреть, я же выхожу по пустой строки ! :
rtnpipe(array,filename,rtn,err)
 
p,j
 
p="file"
 
p:(shell="/bin/sh":command="cat >"_filename:writeonly)::"pipe"
 
p
 
string=$p(array,$c(13,10),1) ; Coment first string routine
 
string,!
 
" s %fcgi(""o"",""stdout"")=""""",!
 
" s %fcgi(""o"",""header"",""Content-Type"")=""text/html""",!
 
status=1
 
j=2:1 string=$p(array,$c(13,10),jq:string=""  d
 
status=1,string="<?" status=2 q
 
status=2,string="?>" status=1 q
 
status=1 d
 
. . i=$L(string):-1:1 i $E(string,i)="""" string=$E(string,1,i)_""""_$E(string,i+1,10000)
 . . 
outline=" s %fcgi(""o"",""stdout"")=%fcgi(""o"",""stdout"")_"""_string_"""_$C(13,10)"
 
status=2 outline=string
 
outline,!
 
" q",!
 
"out(txt) ;",!," s %fcgi(""o"",""stdout"")=%fcgi(""o"",""stdout"")_txt",!," q",!
 
p
 
^FCGI("DOCUMENT_URI","/"_rtn)="^"_$p(rtn,".",1)
 
q
6 сен 16, 12:30    [19632380]     Ответить | Цитировать Сообщить модератору
 Re: Как удалять пустую строку  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1565
Valeriu,

вы ведь сами заполняете массив, который потом выводите в pipe. Почему бы не сформировать собственный признак конца программы (например, $char(0))?
6 сен 16, 12:49    [19632485]     Ответить | Цитировать Сообщить модератору
 Re: Как удалять пустую строку  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2070
Alexey Maslov,
Спасибо. Попробую.
6 сен 16, 13:43    [19632735]     Ответить | Цитировать Сообщить модератору
 Re: Как удалять пустую строку  [new]
servit
Member

Откуда: г. Кишинёв, Республика Молдова
Сообщений: 3119
Блог
Valeriu
Как можно удалять пустую строку при открытие
текстового файла средствами COS ?
Пример на COS
f=##class(%Stream.FileCharacter).%New()
/*
; при необходимости можно подправить
s f.TranslateTable="CP1251"
s f.LineTerminator=$get(^%SYS("Stream","LineTerminator"),$select($$$isUNIX:$char(10),1:$char(13,10)))
*/
f.Filename="c:\temp\test.txt"
while 'f.AtEnd {
  
line=f.ReadLine()
  
"$l(line) = ",$l(line),?15,"line = ",$$$quote(line),!
}
Working with Streams
7 сен 16, 11:26    [19636280]     Ответить | Цитировать Сообщить модератору
 Re: Как удалять пустую строку  [new]
Valeriu
Member

Откуда: Chisinau
Сообщений: 2070
Спасибо всем. Получилось.
7 сен 16, 13:39    [19637455]     Ответить | Цитировать Сообщить модератору
 Re: Как удалять пустую строку  [new]
Alexey Maslov
Member

Откуда: СПб
Сообщений: 1565
В Cache есть интересная особенность при чтении потоковых файлов, которая не встречалась мне в других M-системах.

А именно, даже если не использовать %Stream.FileCharacter, а ограничиться командами языка, Cache корректно читает файлы с "неродными" терминаторами строк: файлы из Windows можно не обрабатывать утилитой dos2unix перед чтением в Cache for UNIX/Linux, и наоборот. Если кому-то нужен доказательный пример, могу привести.
7 сен 16, 14:34    [19637894]     Ответить | Цитировать Сообщить модератору
Все форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M Ответить