OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Пятница, 26 Апрель, 2024 13:32

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Чтение odc файла
СообщениеДобавлено: Понедельник, 27 Март, 2006 11:28 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Здравствуйте.

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

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


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Kubanych писал(а):
...с диска программно odc файл (например, посимвольно)...


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение odc файла
СообщениеДобавлено: Понедельник, 27 Март, 2006 15:28 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Под словом посимвольно я имел ввиду чтение без флагов форматирования. Вот таким способом я записываю одц файл

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 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Чтобы загрузить View из файла, используйте Views.OldView().

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

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


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

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
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 уже реализует эту функциональность...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вторник, 28 Март, 2006 08:50 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1429
Вот примерчик
Код:
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;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 31 Март, 2006 16:46 

Зарегистрирован: Суббота, 04 Март, 2006 15:13
Сообщения: 674
Откуда: СССР
Спасибо большое.

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


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

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


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

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


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

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