OberonCore https://forum.oberoncore.ru/ |
|
Конвертеры https://forum.oberoncore.ru/viewtopic.php?f=23&t=2371 |
Страница 1 из 1 |
Автор: | Роман М. [ Четверг, 18 Февраль, 2010 13:02 ] |
Заголовок сообщения: | Конвертеры |
Отчего может получаться, что применяя конвертер, я получаю пустой файл на выходе? И это притом, что тектовая модель непуста. |
Автор: | Илья Ермаков [ Четверг, 18 Февраль, 2010 13:06 ] |
Заголовок сообщения: | Re: Конвертеры |
А какой файл открываете? Вы, возможно, сами записываете через WriteStore в файл, а потом открываете через конвертер? Просто документ ББ подразумевает, что в корне лежит Documents.View, он уже загружает Documents.Model, а в нём лежит корневая вьюшка (например, TextView). Если самому через Stores что-то записать (например, TextModel), то это не будет документом ODC. Это будет просто файлом формата Stores, не более. |
Автор: | Роман М. [ Четверг, 18 Февраль, 2010 13:16 ] |
Заголовок сообщения: | Re: Конвертеры |
Пытаюсь создать файл 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. |
Автор: | Евгений Темиргалеев [ Четверг, 18 Февраль, 2010 13:24 ] |
Заголовок сообщения: | Re: Конвертеры |
Код: 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 |
Автор: | Роман М. [ Четверг, 18 Февраль, 2010 13:43 ] |
Заголовок сообщения: | Re: Конвертеры |
С импортом при чтении с файла нет проблем, а вот с экспортом в файл - есть. Я указываю на тип конвертера процедурой SetExporter, явно передавая HostTextConv.ExportText как конвертер. Или нужно регистрировать для этого конвертер? |
Автор: | Евгений Темиргалеев [ Четверг, 18 Февраль, 2010 14:36 ] |
Заголовок сообщения: | Re: Конвертеры |
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, который Вы передаёте).Почему получается пустой файл при выгрузке --- посмотрите в сообщении выше код процедуры-экспортёра... |
Автор: | Роман М. [ Четверг, 18 Февраль, 2010 14:43 ] |
Заголовок сообщения: | Re: Конвертеры |
Ага. Понял ![]() Код: 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; |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |