Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на языке Pascal


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Pascal

Выпуск № 155
от 15.04.2006, 16:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 166, Экспертов: 47
В номере:Вопросов: 1, Ответов: 3


Вопрос № 39826: Здравствуйте, Эксперты! Такая проблема: имеется файл ввиде таблице о сведении учеников, в которой первый столбик-номер ученика, второй- его фамилия, третий-его имя и четвертый-его возраст. Как можно добавить в этот файлы новые записи, без стриран...

Вопрос № 39.826
Здравствуйте, Эксперты!
Такая проблема: имеется файл ввиде таблице о сведении учеников, в которой первый столбик-номер ученика, второй- его фамилия, третий-его имя и четвертый-его возраст. Как можно добавить в этот файлы новые записи, без стрирания старых (процедура append отказывается это делать)? Как можно отсортировать таблицу по номеру ученика в порядке возрастания, не теряя связь с другими столбцами?
Смотрите приложение.
Спасибо за внимание.

Приложение:

Отправлен: 09.04.2006, 20:30
Вопрос задал: Иванов Евгений Андреевич (статус: 1-ый класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Полховский Александр Владимирович
Здравствуйте, Иванов Евгений Андреевич!
Append работает с текстовыми файлами (var ... :TextFile). Поэтому Вам необходимо либо изменить подход к чтению/записи (т.е. работать с ним, как с текстовым, то есть и объявить его как текстовый), либо пользоваться процедурой reset, предварительно назначив глобальной переменной FileMode режим записи (подробнее в справке), и перейти к концу файла (seek(FileSize(F))). А затем дописывать всё, что нужно.

По сортировке: всё зависит от выбранного Вами алгоритма сортировки. В любом случае манипулировать Вы будете целыми строками, а не значениями в первом столбце. Советую сразу записывать в отсортированном виде. Тогда не надо будет обрабатывать все записи файла. А чтобы записывать в отсортированном виде, надо создать временый файл (ну или выполнить всё в памяти, первое легче. по-моему), и записывать туда все строки в том порядке, в котором нам нужно. При этом записать добавляемую строку в нужное место.
---------
Спасём нашу хрупкую планету !
Ответ отправил: Полховский Александр Владимирович (статус: Практикант)
Ответ отправлен: 09.04.2006, 22:12

Отвечает: Устинов Сергей Евгеньевич
Здравствуйте, Иванов Евгений Андреевич!

Append работает только с текстовыми файлами (а не типизированными, как у Вас).
Добавлять записи можно так, как показано в приложении.
При сортировке Вы будете сравнивать по какому-то полю, а менять местами записи, таким образом целостность сохранится.
Как Вам уже сказали, считаю нужным для сортировки создавать временный файл.

Приложение:

Ответ отправил: Устинов Сергей Евгеньевич (статус: 3-ий класс)
Ответ отправлен: 09.04.2006, 23:41
Оценка за ответ: 5
Комментарий оценки:
Спасибо за быстрый ответ.
Но можно еще попросить уточнить по поводу сортировки? Вы не могли бы привести свой пример?

Отвечает: shegeda
Здравствуйте, Иванов Евгений Андреевич!

Будем считать, что наша таблица - это поле для лабораторной работы на тему "Файлы и файловые функции, методы сортировки". И не более того. никаких оптимизаций чтения-записи, никакого кеширования, никаких индексов. Тогда задача упростится.
Судя по фрагменту кода, используется типизированный файл, а описание ошибки, возникающей при вызове Append - лишнее тому подтверждение. Тогда наша задача упрощается, поскольку мы можем свободно перемещаться на любую запись в таблице, используя функцию Seek(f, newPos). Определить количество записей в таблице можно функцией FileSize(f). Таким образом, чтобы добавить новые записи в конец файла, нужно предварительно выполнить одну строку кода:
  Seek(fs, FileSize(fs));
С сортировкой немного сложнее, однако, не смертельно. Воспользуемся методом "стакана", когда перебираются все места от начала до конца, и на текущее место ищется максимальное/минимальное значение из оставшихся.
Фрагмент кода в приложении

Приложение:

Ответ отправил: shegeda (статус: 5-ый класс)
Ответ отправлен: 10.04.2006, 02:36


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.30 (beta) от 09.04.2006
Яндекс Rambler's Top100

В избранное