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/ |