OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 20 Апрель, 2024 07:42

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 11 ] 
Автор Сообщение
 Заголовок сообщения: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 14:40 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
И снова я в эфире :D
Считывать из файла хочу.
Вот процедура:
Код:
(*************************************************)
PROCEDURE AReadFile* (IN Path:ARRAY OF CHAR);
VAR
 rfloc:Files.Locator;
 rd:Stores.Reader;
 rfFile:Files.File;
 s:ARRAY(200) OF CHAR;
BEGIN
 StdLog.String(Path);
 StdLog.Ln;
 (**********************)
   rfloc:=Files.dir.This(Path);
   rfFile:=Files.dir.New(rfloc,FALSE);
   rd.ConnectTo(rfFile);
    HALT(0);
   rd.ReadString(s);
 StdLog.String("Строка"+s);
 StdLog.Ln;
   rfFile.Close();
 (**********************)
END AReadFile;


Дело в том что Trap показал мне что
.rfFile Files.File NIL

Что я неправильно делаю?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 15:13 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
А у локатора поле res чему равно?

Код:
result # NIL
   loc.res = 0   no error
result = NIL
   loc.res = 1   invalid name
   loc.res = 2   location not found
   loc.res = 4   write-protection
   loc.res = 5   io error
   loc.res = 8   cancelled


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 15:29 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Хм...
Странно:
Цитата:
File.AReadFile:rfloc^

[0102FE60H] HostFiles.Locator^
.res INTEGER 3
.path HostFiles.FullName "c:\temp\1.txt"

Но ведь такой файл существует... 2 кбайта весит даже...
С кодировками тут проблем не может быть? (хотя наверно это я чушь горожу.)

Но я пробовал на других файлах. та же история...

Может стоит rfloc глобальным и публичным сделать?


Последний раз редактировалось Виталий Пятница, 27 Ноябрь, 2009 15:31, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 15:30 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Виталий писал(а):
Считывать из файла хочу.
Что Вы хотите считывать из файла? А то может стандартные средства подойдут?
StdCmds docu писал(а):
PROCEDURE OpenDoc (file: ARRAY OF CHAR)
Takes a file specification of an BlackBox document as parameter, and opens the document in a document window. ...
Example:
"StdCmds.OpenDoc('System/Rsrc/Menus')"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 15:33 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Евгений Темиргалеев писал(а):
Виталий писал(а):
Считывать из файла хочу.
Что Вы хотите считывать из файла? А то может стандартные средства подойдут?
StdCmds docu писал(а):
PROCEDURE OpenDoc (file: ARRAY OF CHAR)
Takes a file specification of an BlackBox document as parameter, and opens the document in a document window. ...
Example:
"StdCmds.OpenDoc('System/Rsrc/Menus')"


Женя, я хочу считать построчно, ну или посимвольно... Дабы потом каждую строку анализировать и делать что-то с ней.

т.е. поймите меня правильно - я хочу УМЕТЬ. Или точнее научиться азам.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 15:38 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Виталий писал(а):
считать построчно, ну или посимвольно...
Откуда? Из текстов ББ?
text: TextModels.Model
text := Views.OldView(loc, name)(TextViews.View).ThisModel()

Чтение этих текстов описано в Part II, 5 Texts, 5.3 Reading text


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 15:41 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Виталий писал(а):
Или точнее научиться азам.
Как я понимаю, азы разбираются и объясняются на примерах в
Part II, 4 Forms 5 Texts
Part III, 6 View Constructions

Вы там не смотрели?

P.S. Извиняюсь, что ссылки привожу английские, русская документация не установлена - и как там точно - не помню ... по номерам найти можно :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 15:52 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Виталий писал(а):
Цитата:
.res INTEGER 3
.path HostFiles.FullName "c:\temp\1.txt"

Но ведь такой файл существует...
Понятно.

existsAlready = 3;

New - должна создать новый файл, но Вы сами сказали, что он уже есть.

Для открытия уже существующего файла надо вызывать не New, а Old.

Прочие коды ошибок:
Host/Mod/Files.odc
Код:
   CONST
      tempName = "odcxxxxx.tmp";
      docType = "odc";

      serverVersion = TRUE;

      pathLen* = 260;

      nofbufs = 4;   (* max number of buffers per file *)
      bufsize = 2 * 1024;   (* size of each buffer *)

      invalid = KERNEL32.InvalidHandle;

      temp = 0; new = 1; shared = 2; hidden = 3; exclusive = 4; closed = 5;   (* file states *)
      create = -1;

      ok = 0;
      invalidName = 1;   invalidNameErr = 123;
      notFound = 2;   fileNotFoundErr = 2; pathNotFoundErr = 3;
      existsAlready = 3;   fileExistsErr = 80; alreadyExistsErr = 183;
      writeProtected = 4;   writeProtectedErr = 19;
      ioError = 5;
      accessDenied = 6;   accessDeniedErr = 5; sharingErr = 32; netAccessDeniedErr = 65;
      notEnoughMem = 80;   notEnoughMemoryErr = 8;
      notEnoughDisk = 81;   diskFullErr = 39; tooManyOpenFilesErr = 4; noSystemResourcesErr = 1450;

      noMoreFilesErr = 18;

      cancel = -8; retry = -9;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 15:58 

Зарегистрирован: Вторник, 10 Ноябрь, 2009 13:15
Сообщения: 58
Цитата:
Откуда? Из текстов ББ?

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


Цитата:
Для открытия уже существующего файла надо вызывать не New, а Old.

А-а-а мда... Видимо тут я и ошибся...
Спасибо сейчас попробую.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 16:12 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Виталий писал(а):
Как студентов учат в паскале через read читать элементы файла, то же я и в Обероне хочу научиться.
По-моему, работа с текстами гораздо ближе к азам, нежели работа с файлами.. напрямую. Которую на себя каркас берёт... Поправьте меня, товарищи, если я не прав!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как считывать из файла?
СообщениеДобавлено: Пятница, 27 Ноябрь, 2009 18:28 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3261
Откуда: Астрахань
Это известный программистский стереотип - типовая программная ситуация, о которых я где-то уже здесь говорил. . Все привыкли, что файл - это поток символов или последовательность записей. Еще с Pascalя и Unix все привыкли.
И ищут аналогии в КП+ББ.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 11 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB