OberonCore https://forum.oberoncore.ru/ |
|
Работа с файлами https://forum.oberoncore.ru/viewtopic.php?f=81&t=634 |
Страница 1 из 1 |
Автор: | decemberster [ Пятница, 31 Август, 2007 13:14 ] |
Заголовок сообщения: | Работа с файлами |
Подскажите пожалуйста, как проще всего работать с файлами. А именно требуется сохранять в файл и загружать из файла несколько сот тысяч или миллионов значений типа REAL. UPDATE. Уже сам нашел: viewtopic.php?f=23&t=340 |
Автор: | Илья Ермаков [ Пятница, 31 Август, 2007 13:22 ] |
Заголовок сообщения: | Re: Работа с файлами |
Используйте Files.File, на который навешивайте Stores.Writer/Reader - и используйте WriteReal/ReadReal: Код: VAR f: Files.File;
wr: Stores.Writer; res: INTEGER; BEGIN f := Files.dir.New(Files.dir.This("SomeDirectory"), FALSE); wr.ConnectTo(f); FOR ... DO wr.WriteReal(x) END; f.Register("SomeFile", "dat", FALSE, res) END |
Автор: | Сергей Губанов [ Пятница, 31 Август, 2007 13:26 ] |
Заголовок сообщения: | Re: Работа с файлами |
http://msdn2.microsoft.com/en-us/library/Aa363874.aspx |
Автор: | Роман М. [ Вторник, 25 Май, 2010 16:58 ] |
Заголовок сообщения: | Re: Работа с файлами |
Подниму-ка эту тему. Новое - хорошо забытое старое. Создаю нетипизированный (в понятиях Паскаля) файл: Код: MODULE TestFileStore; IMPORT Files, Stores, Log := StdLog; CONST buflen = 1024; TYPE Record* = POINTER TO RECORD (Stores.Store) size: INTEGER; buf: ARRAY buflen OF BYTE; x, y: REAL END; PROCEDURE (r: Record) Externalize- (VAR wr: Stores.Writer); VAR k: INTEGER; BEGIN ASSERT(r.size < buflen, 20); r.Externalize^(wr); wr.WriteInt(r.size); FOR k := 0 TO r.size - 1 DO wr.WriteByte(r.buf[k]) END; wr.WriteReal(r.x); wr.WriteReal(r.y) END Externalize; PROCEDURE ExportToFile* (r: Record; f: Files.File); VAR wr: Stores.Writer; k: INTEGER; BEGIN wr.ConnectTo(f); wr.WriteStore(r) END ExportToFile; PROCEDURE Run*; VAR rec: Record; f: Files.File; res: INTEGER; BEGIN NEW(rec); rec.size := 127; rec.x := 10; rec.y := 20; rec.buf[rec.size-1] := -1; f := Files.dir.New(Files.dir.This("."), Files.exclusive); IF f # NIL THEN ExportToFile (rec, f); f.Register("records", "dat", Files.dontAsk, res); IF res # 0 THEN Log.String("Error #"); Log.Int( res ); Log.Ln END END; rec := NIL END Run; END TestFileStore. TestFileStore.Run Вот, надо ещё аналог File Of Record добавить. В них есть Seek, аналог которой нужно внести, вычисляя размер записи. |
Автор: | Info21 [ Среда, 26 Май, 2010 12:46 ] |
Заголовок сообщения: | Re: Работа с файлами |
Роман М. писал(а): ещё надо ещё А точно надо? Кому и зачем?Записи в реальной жизни почему-то стремятся варьироваться. Чем сложнее задача, тем сильнее. Лично мне случай точно одинаковых записей не встречался никогда. Стоит ли из-за такого вырожденного случая огород городить? |
Автор: | Роман М. [ Среда, 26 Май, 2010 16:37 ] |
Заголовок сообщения: | Re: Работа с файлами |
Info21 писал(а): Лично мне случай точно одинаковых записей не встречался никогда. Да взять хотя бы учебную программу по Паскалю, в которой присутствуют задания по созданию баз данных на основе file of record.Чаще, бывает нужно прочесть разные блоки файла (например, какого-то формата файла), занося данные в соответствующую структуру типа RECORD. Для чтения блока данных можно пользоваться примитивной структурой ARRAY OF BYTE. А вот каких-либо стандартных высокоуровневых средств для занесения в RECORD я не вижу. Например, в Паскале для чтения блока данных из файла в структуру BMPHeader пишем так (одной строкой!): BlockRead(f, BMPHeader, Sizeof(TBMPHeader), cnt); |
Автор: | Info21 [ Среда, 26 Май, 2010 18:48 ] |
Заголовок сообщения: | Re: Работа с файлами |
Роман М. писал(а): Info21 писал(а): Лично мне случай точно одинаковых записей не встречался никогда. Да взять хотя бы учебную программу по Паскалю, в которой присутствуют задания по созданию баз данных на основе file of record.Для всего остального нужен каждый раз специфический ридер, и всё. |
Автор: | Валерий Лаптев [ Четверг, 27 Май, 2010 10:56 ] |
Заголовок сообщения: | Re: Работа с файлами |
Ну, в качестве упражнения с двоичными файлами можно хотя бы простую реляционную БД спрограммить... Для студиозов 2 курса весьма полезная лаба... Шоб знали, как он там унутре... |
Автор: | Евгений Темиргалеев [ Четверг, 27 Май, 2010 12:03 ] |
Заголовок сообщения: | Re: Работа с файлами |
Валерий Лаптев писал(а): Ну, в качестве упражнения с двоичными файлами можно хотя бы простую реляционную БД спрограммить... Если Вы имеете в виду движок БД, то там как раз нужен спец. ридер, а не file of record...
|
Автор: | Валерий Лаптев [ Четверг, 27 Май, 2010 14:18 ] |
Заголовок сообщения: | Re: Работа с файлами |
Не... Для начала хотя бы два файла: файл с записями, и файл с метаинформацией (структура записи). Файл с записями - это оно и есть. Файл с метаинформацией, если ограничить размер имени поля - тоже двоичный файл с записями. Поэтому для обучения иметь простой file of record - полезно... |
Автор: | Евгений Темиргалеев [ Четверг, 27 Май, 2010 16:54 ] |
Заголовок сообщения: | Re: Работа с файлами |
Валерий Лаптев писал(а): файл с записями, и файл с метаинформацией (структура записи). Файл с записями - это оно и есть. не пойму как можно увязать запись таблицы БД с определяемой во время выполнения структурой с зафиксированным на этапе компиляции типом-записью
|
Автор: | Илья Ермаков [ Воскресенье, 30 Май, 2010 15:54 ] |
Заголовок сообщения: | Re: Работа с файлами |
Вот вам file of record, в точности: viewtopic.php?f=2&t=2006 |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |