|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
21.05.2016, 17:33 | #1 |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
[Free Pascal] Проблема с нетипизированным файлом
Здравствуйте,
Условие задачи: 1. Часть Описать структуру с именем NOTE, содержащую следующие поля:
Вводимые данные нужно сохранить в нетипизрованном файле, а при запросе информации о человеке её нужно считать из этого же файла и вывести на экран. Суть проблемы Дело в том, что этот код (см.ниже) я писал в PascalABCNET. И там данная программа работает приемлимо. Компиляцию проходит, данные в файл записываются. Но дело в том, что на занятиях мы работаем в FreePascal. И когда я пробую данный код открыть в FreePascal он ругается при компиляции и выводит ошибку: Can't use read or write on untyped file Может кто-то сможет мне разъяснить в чем у меня заключается проблема и поможет найти решение. Буду премного благодарен. Код программы: Код:
|
21.05.2016, 18:02 | #2 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 472
|
почитайте о расширенном формате reset / rewrite, и о процедурах чтения / записи BlockRead / BlockWrite
http://pascal.net.ru/%D0%97%D0%B0%D0...%D1%8B+%285%29 |
29.05.2016, 20:42 | #3 | |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
Цитата:
Попытался кое-как вникнуть в статью, спасибо. НО... После заполнения n-го кол-ва анкет работников во время записи данных в нетипизированный файл выскакивает ошибка exitcode = 1748. Честно, до конца специфику буфера и count не понял. По этой теме очень мало инфы в интернете, в частности применение нетепизированных файлов на практике. обновленный код программы: Код:
Последний раз редактировалось artems67; 29.05.2016 в 20:48. |
|
29.05.2016, 20:50 | #4 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
Код:
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
29.05.2016, 21:09 | #5 |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
См. шапку темы. В работе исключительно нетепизированный файл. Другие типы файлов у меня не вызывают трудностей.
UPD: Уря заработало! Но все равно некоторые вещи остались недопонятыми. Я так понял в rewrite/reset указывается размер одной записи. rewrite(f1,BufLen); Buflen = размер буфера, т.е. массива a. Но в BlockRead/BlockWrite по идеи указывается количество записей этого размера. BlockWrite(f1,a,1); Я так понял это и есть то самое count. Но почему 1 (эту цифру я подобрал методом тыка) ? Если у меня n кол-во работников. Почему програ проглатывает только эту цифру. Если скажем у меня работников 5 (n=5). В учебниках вообще предлагают какую-то переменную типа word ставить. С ней тоже ошибка. Код программы: Код:
Последний раз редактировалось artems67; 29.05.2016 в 21:15. |
29.05.2016, 22:04 | #6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
и программе абсолютно всё равно, какое у Вас N (хоть 5, хоть 10, хоть 25), т.к. в файл записывается сразу ВЕСЬ МАССИВ. |
|
29.05.2016, 23:37 | #7 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,309
|
Цитата:
В разделе по работе с файлами есть простые и понятные примеры. Как-то так, ...
Как-то так, ...
|
|
29.05.2016, 23:48 | #8 | ||
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
Цитата:
Цитата:
|
||
30.05.2016, 09:49 | #9 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
Цитата:
Reset(f,1); означает - читать по одному байту Reset(f,256); означает - читать по 256 байт за одну операцию ввода/вывода. BlockRead/BlockWrite - указываем сколько БЛОКОВ (размера, заданного при открытии файла) нужно прочитать/записать. Ну и ещё. Операции BlockRead / BlockWrite совсем не обязательно работают с массивом. Они позволяют использовать переменную ЛЮБОГО типа. Хоть integer, хоть string, хоть boolean, хоть Record. Хотя, при этом важно знать, как эта самая переменная хранится в памяти (особенно важно для переменной типа String). в самом простом и общем случае размер блока обращения к файлу ставят размером в 1 байт и при чтении/записи использую SizeOf(переменная) - размер, который занимает переменная в памяти. p.s. а теорию почитайте, полезно! |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Задание с нетипизированным файлом | Василий15 | Паскаль, Turbo Pascal, PascalABC.NET | 17 | 12.05.2016 00:14 |
Валютные операции в pascal - Free Pascal | leonix12 | Lazarus, Free Pascal, CodeTyphon | 2 | 10.04.2016 12:37 |
Turbo Pascal и Free Pascal , в чем разница? | antoxann | Паскаль, Turbo Pascal, PascalABC.NET | 31 | 09.11.2011 07:52 |
Проблема с Free Pascal. | Paster Fob | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 22.02.2011 22:25 |
а free pascal не читает задачи которые написаны на turbo pascal? | demonara | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 25.05.2009 16:28 |