Гость
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как удалять пустую строку / 9 сообщений из 9, страница 1 из 1
06.09.2016, 10:40
    #39304263
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалять пустую строку
Добрый день.
Есть надобность записать .html (и не только)
в виде рутин под COS (GT.M).
При открытие таких файлов, нередко попадаются пустые строки.
Т.е. при записи такой рутины мы получим конец,
где встретится первая пустая строка ...
Как можно удалять пустую строку при открытие
текстового файла средствами COS ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CatFile(cmd,Ret,i,Er)
 n io,line,p
 ;s Er="test"
 s io=$io
 s p=cmd
 o p:(COMMAND=cmd:READONLY)::"PIPE"
 k files
 u p
 For i=1:1 r files(i) s Ret(i)=files(i)_$c(13,10) q:$zeof
 c p
 u io
 q
 ;
Спасибо
...
Рейтинг: 0 / 0
06.09.2016, 11:38
    #39304312
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалять пустую строку
Valeriu,

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

Если вы формируете *.ro-файлы для Cache (для последующего импорта с помощью утилиты %RI или её аналогов), пустые строки надо заменить на строки, состоящие из одного символа "." (точка).
...
Рейтинг: 0 / 0
06.09.2016, 12:19
    #39304355
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалять пустую строку
Чуть не забыл ответить на заданный вопрос :)

Отвечу вопросом: разве пустая строка, прочитанная из файла, открытого как обычный "STREAM", не будет иметь $length(строка)=0?
...
Рейтинг: 0 / 0
06.09.2016, 12:30
    #39304365
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалять пустую строку
Alexey Maslov,
Вы правы, я неправильно делаю,
но мне нужно записать то что открыл.
А открываю я с пустыми строками.
Записываю так, используя в качестве разделителя перевод строки
Здесь нужно посмотреть, я же выхожу по пустой строки ! :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
rtnpipe(array,filename,rtn,err)
 n p,j
 s p="file"
 o p:(shell="/bin/sh":command="cat >"_filename:writeonly)::"pipe"
 u p
 s string=$p(array,$c(13,10),1) ; Coment first string routine
 w string,!
 w " s %fcgi(""o"",""stdout"")=""""",!
 w " s %fcgi(""o"",""header"",""Content-Type"")=""text/html""",!
 s status=1
 f j=2:1 s string=$p(array,$c(13,10),j) q:string=""  d
 . i status=1,string="<?" s status=2 q
 . i status=2,string="?>" s status=1 q
 . i status=1 d
 . . f i=$L(string):-1:1 i $E(string,i)="""" s string=$E(string,1,i)_""""_$E(string,i+1,10000)
 . . s outline=" s %fcgi(""o"",""stdout"")=%fcgi(""o"",""stdout"")_"""_string_"""_$C(13,10)"
 . i status=2 s outline=string
 . w outline,!
 w " q",!
 w "out(txt) ;",!," s %fcgi(""o"",""stdout"")=%fcgi(""o"",""stdout"")_txt",!," q",!
 c p
 s ^FCGI("DOCUMENT_URI","/"_rtn)="^"_$p(rtn,".",1)
 q
...
Рейтинг: 0 / 0
06.09.2016, 12:49
    #39304388
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалять пустую строку
Valeriu,

вы ведь сами заполняете массив, который потом выводите в pipe. Почему бы не сформировать собственный признак конца программы (например, $char(0))?
...
Рейтинг: 0 / 0
06.09.2016, 13:43
    #39304413
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалять пустую строку
Alexey Maslov,
Спасибо. Попробую.
...
Рейтинг: 0 / 0
07.09.2016, 11:26
    #39304999
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалять пустую строку
ValeriuКак можно удалять пустую строку при открытие
текстового файла средствами COS ?Пример на COS
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
s f=##class(%Stream.FileCharacter).%New()
/*
; при необходимости можно подправить
s f.TranslateTable="CP1251"
s f.LineTerminator=$get(^%SYS("Stream","LineTerminator"),$select($$$isUNIX:$char(10),1:$char(13,10)))
*/
s f.Filename="c:\temp\test.txt"
while 'f.AtEnd {
  s line=f.ReadLine()
  w "$l(line) = ",$l(line),?15,"line = ",$$$quote(line),!
}
Working with Streams
...
Рейтинг: 0 / 0
07.09.2016, 13:39
    #39305181
Valeriu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалять пустую строку
Спасибо всем. Получилось.
...
Рейтинг: 0 / 0
07.09.2016, 14:34
    #39305250
Alexey Maslov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как удалять пустую строку
В Cache есть интересная особенность при чтении потоковых файлов, которая не встречалась мне в других M-системах.

А именно, даже если не использовать %Stream.FileCharacter, а ограничиться командами языка, Cache корректно читает файлы с "неродными" терминаторами строк: файлы из Windows можно не обрабатывать утилитой dos2unix перед чтением в Cache for UNIX/Linux, и наоборот. Если кому-то нужен доказательный пример, могу привести.
...
Рейтинг: 0 / 0
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Как удалять пустую строку / 9 сообщений из 9, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]