Раздел: Стандартные функции Паскаля
Процедура BlockWrite
Основы программирования Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее... |
Процедура BlockWrite записывает данные из памяти в нетипизированный файл. Синтаксис:
procedure BlockWrite(var F: file; const Buf; Count: Int64; var Result: Int64); procedure BlockWrite(var F: file; const Buf; Count: LongInt; var Result: LongInt); procedure BlockWrite(var F: file; const Buf; Count: Cardinal; var Result: Cardinal); procedure BlockWrite(var F: file; const Buf; Count: Word; var Result: Word); procedure BlockWrite(var F: file; const Buf; Count: Word; var Result: Integer); procedure BlockWrite(var F: file; const Buf; Count: LongInt);
Процедура BlockWrite записывает блоки данных из памяти в файл F. Количество блоков (записей) указано в параметре Count. Сами данные должны передаваться через параметр Buf.
Блок данных (запись) - это блок байтов, размер которого указан при вызове процедур Rewrite или Reset.
Result - это необязательный параметр. Этот параметр не описан в документации. Судя по всему, он предусмотрен для совместимости с процедурой BlockRead, где в него возвращается количество фактически прочитанных записей.
Однако при использовании в процедуре BlockWrite в этот параметр всегда возвращается значение, равное указанному в параметре Count, даже если на самом деле было записано меньше блоков (например, если в Buf передано меньше записей, чем указано в параметре Count).
Если данные не удается записать на диск, то происходит ошибка времени выполнения. Это поведение может управляться переключателем {$I}.
В зависимости от состояния переключателя {$I} при наличии ошибки может возникнуть ошибка времени выполнения. В состоянии {$I-} используйте функцию IOResult для проверки ошибок. Подробнее о директивах компилятора см. здесь.
Пример использования процедуры BlockWrite:
program blockwriteproc; const COUNT_REC = 32; LEN_REC = 2; type TWords = array[1..COUNT_REC] of WORD; var fw1 : file; //Файл для записи по блокам fw2 : file of WORD; //Файл для записи NumRec : WORD; Buf : TWords; i : WORD; //**************************************************************** // ОСНОВНАЯ ПРОГРАММА //**************************************************************** begin Assign(fw1, 'write-1.txt'); Assign(fw2, 'write-2.txt'); Rewrite(fw1, //Файл для записи по блокам LEN_REC); //Размер блока в байтах Rewrite(fw2); for i := 1 to COUNT_REC do begin Buf[i] := i * 100; Write(fw2, Buf[i]); end; BlockWrite(fw1, //Файл Buf, //Массив блоков для записи в файл COUNT_REC, //Сколько блоков надо записать в файл NumRec); //См. пояснения выше WriteLn('The number of blocks written = ', NumRec); Close(fw1); Close(fw2); ReadLn; end.
Здесь мы используем два способа записи в файл массива из 32 слов.
Первый способ более привычный - последовательная запись слов в типизированный файл.
Во втором способе мы используем процедуру BlockWrite, чтобы сохранить в файл весь массив слов. Основное отличие заключается в том, что во втором способе мы можем использовать нетипизированный файл. В некоторых случаях это более удобно.
Сравните на рисунке ниже содержимое двух файлов, созданных нашей программой, и убедитесь, что они совершенно одинаковые.
Вступить в группу "Основы программирования"
Подписаться на канал в РУТУБ Подписаться на Дзен-канал Подписаться на рассылки по программированию |
Как стать программистом 2.0
Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее... |
Помощь в технических вопросах
Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее... |