OberonCore
https://forum.oberoncore.ru/

Чтение odc файла
https://forum.oberoncore.ru/viewtopic.php?f=23&t=136
Страница 1 из 1

Автор:  Kubanych [ Понедельник, 27 Март, 2006 11:28 ]
Заголовок сообщения:  Чтение odc файла

Здравствуйте.

Кто нибудь читал с диска программно odc файл
(например, посимвольно). Не можете выложить минимальный
примерчик.

Заранее благодарю.
С уважением,
Кубанычбек.

Автор:  Сергей Губанов [ Понедельник, 27 Март, 2006 13:18 ]
Заголовок сообщения:  Re: Чтение odc файла

Kubanych писал(а):
...с диска программно odc файл (например, посимвольно)...


odc - бинарный файл, его читают не посимвольно, а побайтово. Но если читать побайтово, то почему вопрос именно про odc, а не про любой другой тип бинарных файлов? Хотите сделать свою реализацию модуля Stores? Ну, тогда, в качестве примера можно взять сам модуль Stores.

Автор:  Kubanych [ Понедельник, 27 Март, 2006 15:28 ]
Заголовок сообщения:  Re: Чтение odc файла

Под словом посимвольно я имел ввиду чтение без флагов форматирования. Вот таким способом я записываю одц файл

tOdc*=POINTER TO RECORD
f: TextMappers.Formatter;
t*: TextModels.Model; v: TextViews.View;
loc: Files.Locator;
res: INTEGER;
conv: Converters.Converter;
fileName:Files.Name;
END;

PROCEDURE (odc:tOdc ) OpenAt*(folderName:ARRAY OF CHAR),NEW;
BEGIN
odc.loc := Files.dir.This(folderName);
odc.t := TextModels.dir.New(); (* ñîçäàíèå ïóñòîãî íîñèòåëÿ òåêñòà *)
odc.f.ConnectTo(odc.t)
END OpenAt;

PROCEDURE (odc:tOdc ) Save * (fileName:ARRAY OF CHAR ),NEW;
VAR res:INTEGER;
BEGIN
odc.v := TextViews.dir.New(odc.t); (* ñîçäàíèå îòîáðàæåíèÿ òåêñòà äëÿ ñîçäàííîãî âûøå òåêñòà *)
odc.fileName:=fileName$;
odc.conv:=NIL;
Views.Register (odc.v,FALSE,odc.loc,odc.fileName,odc.conv,odc.res)
END Save;

PROCEDURE (odc:tOdc) String*(str:ARRAY OF CHAR),NEW;
VAR i:INTEGER;
BEGIN
i:=0;
WHILE str[i]#0X DO
IF str[i]=09X THEN
odc.f.WriteTab
ELSE
odc.f.WriteChar(str[i])
END;
INC(i)
END
END String;

PROCEDURE (odc:tOdc) Ln*(),NEW ;
BEGIN
odc.f.WriteLn
END Ln;

PROCEDURE (odc:tOdc) Tab*(),NEW ;
BEGIN
odc.f.WriteTab
END Tab;

PROCEDURE (odc:tOdc) Int*(int:INTEGER),NEW;
VAR str:ARRAY 256 OF CHAR;
BEGIN
Strings.IntToString(int,str);
odc.String(str)
END Int;

PROCEDURE (odc:tOdc) Real*(real:REAL),NEW;
VAR str:ARRAY 256 OF CHAR;
BEGIN
Strings.RealToString(real,str);
odc.String(str)
END Real;


и теперь хотел считать odc файлы или хотя бы получить view на
файл с диска.

Автор:  Илья Ермаков [ Понедельник, 27 Март, 2006 16:10 ]
Заголовок сообщения: 

Чтобы загрузить View из файла, используйте Views.OldView().

Далее:
IF view IS TextViews.View THEN
reader := view(TextViews.View).NewReader();

- и дальше посивольно reader.ReadChar

Автор:  Сергей Губанов [ Понедельник, 27 Март, 2006 16:51 ]
Заголовок сообщения:  Re: Чтение odc файла

Kubanych писал(а):
PROCEDURE (odc: tOdc) String* (str: ARRAY OF CHAR), NEW;
PROCEDURE (odc: tOdc) Ln*, NEW;
PROCEDURE (odc: tOdc) Tab*, NEW;
PROCEDURE (odc: tOdc) Int* (int: INTEGER), NEW;
PROCEDURE (odc: tOdc) Real* (real: REAL), NEW;

Но TextMappers.Formatter уже реализует эту функциональность...

Автор:  Trurl [ Вторник, 28 Март, 2006 08:50 ]
Заголовок сообщения: 

Вот примерчик
Код:
PROCEDURE LoadStringList*(name: Files.Name;VAR a:Dialog.List);
   VAR s:Dialog.String;
         loc: Files.Locator; 
         v: Views.View; t: TextModels.Model;
         r:TextModels.Reader;
         i,n:INTEGER;
         ch:CHAR;
   BEGIN
      v := Views.OldView(Files.dir.This(""), name$);
      n:=0;
      IF (v # NIL) & (v IS TextViews.View) THEN
         t := v.ThisModel()(TextModels.Model);
         r:=t.NewReader(NIL);
         i:=0;
         WHILE (~r.eot) DO
            r.ReadChar(ch);   
            IF (ch = TextModels.line) OR (ch = TextModels.para) THEN
               s[i]:= 0X;
              IF s$#"" THEN
                  a.SetItem(n,s); INC(n)
               END;
               i:=0;
            ELSE
               s[i]:= ch;
               INC(i)
            END;
         END;
      END
   END LoadStringList;

Автор:  Kubanych [ Пятница, 31 Март, 2006 16:46 ]
Заголовок сообщения: 

Спасибо большое.

Мы делаем систему по численным методам в строительном проектировании, где проекты пользователей сохранаются в виде
блэкбоксовских модулей и есть модули, генерируемые системой.
Поэтому чтение odc файлов нам надо для запуска компилятора
и последующего запуска процедур из
сгенерированного и скомпилированного модуля.

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