OberonCore

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

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




Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Конвертеры
СообщениеДобавлено: Четверг, 18 Февраль, 2010 13:02 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Отчего может получаться, что применяя конвертер, я получаю пустой файл на выходе? И это притом, что тектовая модель непуста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конвертеры
СообщениеДобавлено: Четверг, 18 Февраль, 2010 13:06 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
А какой файл открываете?

Вы, возможно, сами записываете через WriteStore в файл, а потом открываете через конвертер?

Просто документ ББ подразумевает, что в корне лежит Documents.View, он уже загружает Documents.Model, а в нём лежит корневая вьюшка (например, TextView).

Если самому через Stores что-то записать (например, TextModel), то это не будет документом ODC. Это будет просто файлом формата Stores, не более.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конвертеры
СообщениеДобавлено: Четверг, 18 Февраль, 2010 13:16 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Пытаюсь создать файл TXT, записывая конвертером текстовую модель.

Вот часть кода:
Код:
PROCEDURE (F: TextFile) ConnectWriter*, NEW;
   VAR store: Stores.Store;
BEGIN
   ASSERT(F # NIL); ASSERT(F.IsOpen); ASSERT(F.exporter # NIL);
   F.text := TextModels.dir.New();
   (*F.writer := F.text.NewWriter(NIL);*)
   F.formatter.ConnectTo(F.text)
END ConnectWriter;

PROCEDURE (F: TextFile) WriteLine* (IN S: ARRAY OF CHAR), NEW;
BEGIN
   ASSERT(F.IsOpen);
   F.formatter.WriteString(S); F.formatter.WriteLn
END WriteLine;

PROCEDURE (F: TextFile) Register* (name: Files.Name; type: Files.Type; ask: BOOLEAN; OUT res: INTEGER), NEW;
BEGIN
   ASSERT(F.IsOpen);
   ASSERT(name # "");
   F.exporter(F.text, F.file);
   F.file.Register (name, type, ask, res)
END Register;

PROCEDURE DoWrite*;
   VAR
      F: TestAsciiFile.TextFile;
      res: INTEGER;
      line: ARRAY 1024 OF CHAR;
BEGIN
   NEW(F); ASSERT(F # NIL);
   res := F.New (Files.dir.This("e:/"), Files.dontAsk);
   IF F.IsOpen THEN
      F.SetExporter (HostTextConv.ExportText);
      F.ConnectWriter;
      WriteLn ("Connection done.");
      F.WriteLine ("Line1");
      F.WriteLine ("Line2");
      F.WriteLine ("Line3");
      WriteLn ("Lines done.");
      F.Register("hello", "txt", Files.dontAsk, res);
      F.Close;
      WriteLn ("Register done.")
   END;
   IF res # 0 THEN Error (res) END
END DoWrite;

Получаю пустой файл hello.txt.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конвертеры
СообщениеДобавлено: Четверг, 18 Февраль, 2010 13:24 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Код:
   PROCEDURE ExportText* (s: Stores.Store; f: Files.File);
      VAR w: Stores.Writer; t: TextModels.Model; r: TextModels.Reader; ch: CHAR;
   BEGIN
      ASSERT(s # NIL, 20); ASSERT(f # NIL, 21);
      s := TextView(s);
      IF s # NIL THEN
...
      END
   END ExportText;

Код:
MODULE Config;

   IMPORT Dialog, Converters, OleData;

   PROCEDURE Setup*;
      VAR res: INTEGER;
   BEGIN
      Converters.Register("HostTextConv.ImportText", "HostTextConv.ExportText", "TextViews.View", "txt", {Converters.importAll});...

(аналогично) viewtopic.php?p=42157#p42157


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конвертеры
СообщениеДобавлено: Четверг, 18 Февраль, 2010 13:43 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
С импортом при чтении с файла нет проблем, а вот с экспортом в файл - есть.
Я указываю на тип конвертера процедурой SetExporter, явно передавая HostTextConv.ExportText как конвертер. Или нужно регистрировать для этого конвертер?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конвертеры
СообщениеДобавлено: Четверг, 18 Февраль, 2010 14:36 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Docu/Converters писал(а):
A file converter is an importer which translates a file into a store (usually some view type), or an exporter which translates a store into a file, or it is both an importer and an exporter simultaneously.
Конкретный конвертер предназначен для конкретного Stores.Store. Используемый Вами --- для TextViews.View (не TextModels.Model, который Вы передаёте).

Почему получается пустой файл при выгрузке --- посмотрите в сообщении выше код процедуры-экспортёра...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Конвертеры
СообщениеДобавлено: Четверг, 18 Февраль, 2010 14:43 

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1177
Откуда: Мариуполь
Ага. Понял :!:

Код:
PROCEDURE (F: TextFile) Register* (name: Files.Name; type: Files.Type; ask: BOOLEAN; OUT res: INTEGER), NEW;
VAR v: TextViews.View;
BEGIN
   ASSERT(F.IsOpen);
   ASSERT(name # "");
   v := TextViews.dir.New(F.text); (* <-- *)
   F.exporter(v, F.file);
   F.file.Register (name, type, ask, res)
END Register;


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

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


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

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


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

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