OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 17 Ноябрь, 2019 17:50

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




Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
 Заголовок сообщения: Работа с файлами
СообщениеДобавлено: Пятница, 31 Август, 2007 13:14 

Зарегистрирован: Воскресенье, 22 Июль, 2007 03:25
Сообщения: 25
Подскажите пожалуйста, как проще всего работать с файлами. А именно требуется сохранять в файл и загружать из файла несколько сот тысяч или миллионов значений типа REAL.

UPDATE. Уже сам нашел: viewtopic.php?f=23&t=340


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Пятница, 31 Август, 2007 13:22 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9155
Откуда: Россия, Орёл
Используйте 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Пятница, 31 Август, 2007 13:26 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
http://msdn2.microsoft.com/en-us/library/Aa363874.aspx


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Вторник, 25 Май, 2010 16:58 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1162
Откуда: Tel-Aviv
Подниму-ка эту тему. Новое - хорошо забытое старое.

Создаю нетипизированный (в понятиях Паскаля) файл:
Код:
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, аналог которой нужно внести, вычисляя размер записи.


Последний раз редактировалось Роман М. Среда, 26 Май, 2010 16:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Среда, 26 Май, 2010 12:46 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Роман М. писал(а):
ещё надо ещё
А точно надо? Кому и зачем?
Записи в реальной жизни почему-то стремятся варьироваться.
Чем сложнее задача, тем сильнее.

Лично мне случай точно одинаковых записей не встречался никогда.
Стоит ли из-за такого вырожденного случая огород городить?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Среда, 26 Май, 2010 16:37 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1162
Откуда: Tel-Aviv
Info21 писал(а):
Лично мне случай точно одинаковых записей не встречался никогда.
Да взять хотя бы учебную программу по Паскалю, в которой присутствуют задания по созданию баз данных на основе file of record.

Чаще, бывает нужно прочесть разные блоки файла (например, какого-то формата файла), занося данные в соответствующую структуру типа RECORD.
Для чтения блока данных можно пользоваться примитивной структурой ARRAY OF BYTE. А вот каких-либо стандартных высокоуровневых средств для занесения в RECORD я не вижу.

Например, в Паскале для чтения блока данных из файла в структуру BMPHeader пишем так (одной строкой!):
BlockRead(f, BMPHeader, Sizeof(TBMPHeader), cnt);


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Среда, 26 Май, 2010 18:48 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8196
Откуда: Троицк, Москва
Роман М. писал(а):
Info21 писал(а):
Лично мне случай точно одинаковых записей не встречался никогда.
Да взять хотя бы учебную программу по Паскалю, в которой присутствуют задания по созданию баз данных на основе file of record.
Такие задания появились только потому, что в языке есть средство. А учителя они наивные в отношении программирования как девушки, изучающие модные журналы.

Для всего остального нужен каждый раз специфический ридер, и всё.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Четверг, 27 Май, 2010 10:56 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3109
Откуда: Астрахань
Ну, в качестве упражнения с двоичными файлами можно хотя бы простую реляционную БД спрограммить... Для студиозов 2 курса весьма полезная лаба... Шоб знали, как он там унутре... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Четверг, 27 Май, 2010 12:03 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4525
Откуда: Россия, Орёл
Валерий Лаптев писал(а):
Ну, в качестве упражнения с двоичными файлами можно хотя бы простую реляционную БД спрограммить...
Если Вы имеете в виду движок БД, то там как раз нужен спец. ридер, а не file of record...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Четверг, 27 Май, 2010 14:18 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3109
Откуда: Астрахань
Не... Для начала хотя бы два файла: файл с записями, и файл с метаинформацией (структура записи). Файл с записями - это оно и есть. Файл с метаинформацией, если ограничить размер имени поля - тоже двоичный файл с записями. Поэтому для обучения иметь простой file of record - полезно... :)


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

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4525
Откуда: Россия, Орёл
Валерий Лаптев писал(а):
файл с записями, и файл с метаинформацией (структура записи). Файл с записями - это оно и есть.
не пойму как можно увязать запись таблицы БД с определяемой во время выполнения структурой с зафиксированным на этапе компиляции типом-записью


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с файлами
СообщениеДобавлено: Воскресенье, 30 Май, 2010 15:54 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9155
Откуда: Россия, Орёл
Вот вам file of record, в точности:

viewtopic.php?f=2&t=2006


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

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


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

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


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

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