powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / текстовый файл
21 сообщений из 21, страница 1 из 1
текстовый файл
    #35127599
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите как реализовать на Каше такую идею.
Мне нужно извлечь текст из текстового файла (из файла с расширением или .doc или .txt), и дальше работать с этим текстом как с типом %String в глобале например. Т.е. содержимое файла преобразовать в строку.
Можете код привести, а то что-то е получается у меня...
Я делал через %Stream - но в итоге получилась билиберда. На csp странице каракули вместо текста файла!
...
Рейтинг: 0 / 0
текстовый файл
    #35128312
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что значить работать как со стрингом ?

Я тут где то выкладывал пример - который построчно считывал файл в глобал - получалась следующая структура

^file=кол-во строк
^file(1)=1-я строка файла
...
^file(n)=n-я строка файла

Но это для простых текстовых файлов - к которым например .doc не относиться

Что до каракулей - это смотря в какой кодировке файл
...
Рейтинг: 0 / 0
текстовый файл
    #35128683
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы откройте .doc файл блокнотом. Пробовали?

В принципе можно с ним через ActiveX-Cache Activate.
Где-то на форуме было, как работать с экселем, также попробйте с вордом.

А у вас с .txt файлом тоже проблемы?
...
Рейтинг: 0 / 0
текстовый файл
    #35128846
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CacheLotМожете код привести, а то что-то е получается у меня...
Как вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TEST
 n  
 s len= 100 
 s file=##class(%File).%New("file.txt")
 d file.Open("RSN")
 s val=file.Read(len)
 while val'="" {
    s ^tmp($i(i))=val
    s val=file.Read(len)
 }
 d file.Close()
 q
...
Рейтинг: 0 / 0
текстовый файл
    #35130374
Dysan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я кстати не понял почему в классе %File
есть функция WriteLine, а ReadLine - нет !
т.е. получаеться я должен посимвольно считывать пока не упрусь
с символ перевода строки? Не мог бы кто-нибуть подсказать как его в cache описать?
...
Рейтинг: 0 / 0
текстовый файл
    #35130431
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЕМНИП Если вы в параметрах открытия указали только "R" - то ..Read() и так будет читать строки...

Для того что бы он читал не строки, а байты - нужно указывать "RS"
...
Рейтинг: 0 / 0
текстовый файл
    #35130432
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DysanНе мог бы кто-нибуть подсказать как его в cache описать?
Пример чтения файла построчно я приводил тут
...
Рейтинг: 0 / 0
текстовый файл
    #35130450
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PtnЕсли вы в параметрах открытия указали только "R" - то ..Read() и так будет читать строки...
Это когда такое сделали? Я как-то интересовался у представителей IS... Они сказали, что аналога ReadLn() нет...
...
Рейтинг: 0 / 0
текстовый файл
    #35130461
Dysan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо
...
Рейтинг: 0 / 0
текстовый файл
    #35130472
Dysan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот вариант есть
Set stream=##class(%FileCharacterStream).%New()
Set stream.Filename="c:\myfile.txt"
While 'stream.AtEnd {
Set line=stream.ReadLine()
; Process the line here
}
...
Рейтинг: 0 / 0
текстовый файл
    #35130485
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ptn , я сделал тестовый пример...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TEST
 n  
 s file=##class(%File).%New("c:\box\tmp.txt")
 d file.Open("R")
 s val=file.Read()
 while val'="" {
    w !,val
    r *yy
    s val=file.Read()
 }
 d file.Close()
 q
Но в таком варианте Read() не работает...
Код: plaintext
<UNDEFINED>zRead+ 2 ^%ooLibrary.File. 1 
Как правильно читать файл построчно?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
текстовый файл
    #35130494
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я со "стремами" не работал... Dysan , там файл "подгружается" сразу? Или по мере "обращения"?
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
текстовый файл
    #35130510
Dysan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скорее всего по мере обращения ))
...
Рейтинг: 0 / 0
текстовый файл
    #35130784
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
krvsa
Как правильно читать файл построчно?


подловил .... йа оказыается через open use read читал :)
...
Рейтинг: 0 / 0
текстовый файл
    #35131034
LenRover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot krvsa]Я со "стремами" не работал... Dysan , там файл "подгружается" сразу? Или по мере "обращения"?

файл никак не подгружается. вы указываете стриму ссылку на файл, поэтому он в себе сначала хранить всего лишь ссылку. когда начинаешь его ReadLine-ить, он построчно считывает файл. Он его вообще никуда не подгружает.
FileCharacterStream предназначен только для работы с внешними файлами.. то есть при работе с файлом через FileCharacterStream означает что вы работает с потоком который хранится во внешнем файле.. Это как будто вы обращаетесь к потоку, который не в памяти, а вне. Поэтому при работе с этим классом естесттвенно можно тока построчно обращаться, а сразу никак, также как и при работе со стримом вообще.
а вот класс %File - он уже для того, чтобы работать с файлом, также как и с потоком... то есть просто способ работы с файлом. %File дает возможность обрабатывать файл так как будто он поток. в этом случае, файл будет весь подгружаться.
...
Рейтинг: 0 / 0
текстовый файл
    #35131541
Блок А.Н.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторв этом случае, файл будет весь подгружаться.
Сомневаюсь
...
Рейтинг: 0 / 0
текстовый файл
    #35131648
Фотография krvsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже считаю, что через %File он не загружается сразу. Поскольку замедлений при открытии не замечалось...

Спасибо за консультацию по стремам.
----------
Cache for Windows NT (Intel) 5.0.20 (Build 6305) Fri Sep 16 2005 11:54:10 EDT
...
Рейтинг: 0 / 0
текстовый файл
    #35133180
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Блок А.Н.А вы откройте .doc файл блокнотом. Пробовали?
В принципе можно с ним через ActiveX-Cache Activate.
Где-то на форуме было, как работать с экселем, также попробйте с вордом.
А у вас с .txt файлом тоже проблемы?

У меня не получается с русским текстом.
Когда копирую содержимое файла в глобаль, в последнем только знаки вопроса...
Делал я так:
1) Создал класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
/// 
Class User.Text Extends %Persistent
{

Property FileGlobal As %GlobalCharacterStream(LOCATION = "^User.MyText");

}


2) Написал программу:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
TEST
 s file=##class(%File).%New("D:\text.txt")
 
 do file.Open("RU")
 
 s x=##class(User.Text).%New()
 
 do x.FileGlobal.CopyFrom(file)
 
 do x.%Save()
 q

Как справится с верным отображением русских букв? С англицкими - всё вери гуд!
Причём русские буквы не просматириваются ни в портале управления системой, ни на CSP странице...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
<html>
<head>
<title>	Cache Server Page </title>
</head>
<body>
Содержимое файла:
#(^User.MyText( 1 , 1 ))#		
</body>
</html>
...
Рейтинг: 0 / 0
текстовый файл
    #35133225
Игорь Сойников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
скорее всего не совпадает кодировка. у Вас база случайно не Unicode?
Тогда надо преобразовывать CP1251/CP866 в Unicode, а потом сохранять.
...
Рейтинг: 0 / 0
текстовый файл
    #35133374
Alexey Maslov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
do file.Open("RUK\CP1251\")
должно работать в любой Cache (в т.ч. в Юникод), если файл в кодировке Windows.
...
Рейтинг: 0 / 0
текстовый файл
    #35133560
CacheLot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Alexey Maslov
Код: plaintext
do file.Open("RUK\CP1251\")
должно работать в любой Cache (в т.ч. в Юникод), если файл в кодировке Windows.

Спасибо, друг, урааа, усё заработалооо!
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / текстовый файл
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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