OberonCore
https://forum.oberoncore.ru/

Как считывать из файла?
https://forum.oberoncore.ru/viewtopic.php?f=23&t=2129
Страница 1 из 1

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

И снова я в эфире :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

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

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

А у локатора поле 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

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

Хм...
Странно:
Цитата:
File.AReadFile:rfloc^

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

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

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

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

Автор:  Евгений Темиргалеев [ Пятница, 27 Ноябрь, 2009 15:30 ]
Заголовок сообщения:  Re: Как считывать из файла?

Виталий писал(а):
Считывать из файла хочу.
Что Вы хотите считывать из файла? А то может стандартные средства подойдут?
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')"

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

Евгений Темиргалеев писал(а):
Виталий писал(а):
Считывать из файла хочу.
Что Вы хотите считывать из файла? А то может стандартные средства подойдут?
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')"


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

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

Автор:  Евгений Темиргалеев [ Пятница, 27 Ноябрь, 2009 15:38 ]
Заголовок сообщения:  Re: Как считывать из файла?

Виталий писал(а):
считать построчно, ну или посимвольно...
Откуда? Из текстов ББ?
text: TextModels.Model
text := Views.OldView(loc, name)(TextViews.View).ThisModel()

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

Автор:  Евгений Темиргалеев [ Пятница, 27 Ноябрь, 2009 15:41 ]
Заголовок сообщения:  Re: Как считывать из файла?

Виталий писал(а):
Или точнее научиться азам.
Как я понимаю, азы разбираются и объясняются на примерах в
Part II, 4 Forms 5 Texts
Part III, 6 View Constructions

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

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

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

Виталий писал(а):
Цитата:
.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;

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

Цитата:
Откуда? Из текстов ББ?

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


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

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

Автор:  Евгений Темиргалеев [ Пятница, 27 Ноябрь, 2009 16:12 ]
Заголовок сообщения:  Re: Как считывать из файла?

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

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

Это известный программистский стереотип - типовая программная ситуация, о которых я где-то уже здесь говорил. . Все привыкли, что файл - это поток символов или последовательность записей. Еще с Pascalя и Unix все привыкли.
И ищут аналогии в КП+ББ.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/