![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
![]()
Здравствуйте,
Условие задачи: 1. Часть Описать структуру с именем NOTE, содержащую следующие поля:
Вводимые данные нужно сохранить в нетипизрованном файле, а при запросе информации о человеке её нужно считать из этого же файла и вывести на экран. Суть проблемы Дело в том, что этот код (см.ниже) я писал в PascalABCNET. И там данная программа работает приемлимо. Компиляцию проходит, данные в файл записываются. Но дело в том, что на занятиях мы работаем в FreePascal. И когда я пробую данный код открыть в FreePascal он ругается при компиляции и выводит ошибку: Can't use read or write on untyped file Может кто-то сможет мне разъяснить в чем у меня заключается проблема и поможет найти решение. Буду премного благодарен. Код программы: Код:
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 25.01.2015
Сообщений: 474
|
![]()
почитайте о расширенном формате reset / rewrite, и о процедурах чтения / записи BlockRead / BlockWrite
http://pascal.net.ru/%D0%97%D0%B0%D0...%D1%8B+%285%29 |
![]() |
![]() |
![]() |
#3 | |
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
![]() Цитата:
Попытался кое-как вникнуть в статью, спасибо. НО... После заполнения n-го кол-ва анкет работников во время записи данных в нетипизированный файл выскакивает ошибка exitcode = 1748. Честно, до конца специфику буфера и count не понял. По этой теме очень мало инфы в интернете, в частности применение нетепизированных файлов на практике. обновленный код программы: Код:
Последний раз редактировалось artems67; 29.05.2016 в 20:48. |
|
![]() |
![]() |
![]() |
#4 |
2 the Nation Glory
Старожил
Регистрация: 27.05.2014
Сообщений: 3,289
|
![]() Код:
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы. |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]() Цитата:
и программе абсолютно всё равно, какое у Вас N (хоть 5, хоть 10, хоть 25), т.к. в файл записывается сразу ВЕСЬ МАССИВ. |
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 23.10.2010
Сообщений: 2,377
|
![]() Цитата:
![]() В разделе по работе с файлами есть простые и понятные примеры. Как-то так, ...
Как-то так, ...
|
|
![]() |
![]() |
![]() |
#8 | ||
Пользователь
Регистрация: 17.11.2015
Сообщений: 62
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#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 |