![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
V@nix |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Народ помогите. Есть 2 файла 1 и 2, в 1-ом файле содержатся записи о книгах:
book= record В файле 2 - запись об абонементах: man=record запись atribut выглядит так: atribut=record Вопрос! Когда абонемент берет книгу то должны вносится изменения в запись book (файл №1). Изменяется кол-во книг текущей книги book.ekz. И шифр книги cod добавляется в запись man.k[i].shifr ... Как внести изменения в существующую запись (запись находится в файле)? |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
А ты уже нашел запись, которую нужно менять, или нужно ее найти и изменить?
|
V@nix |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата(volvo @ 21.05.05 13:53) А ты уже нашел запись, которую нужно менять, или нужно ее найти и изменить? Я нашел запись. Лучше покажу, вот эта процедура которая производит операцию выдача книг procedure vidacha; |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Так вот после этого:
man.k[o].shifr:=book.cod; в памяти все изменения уже произведены - осталось перенести их в файл. Для этого возвращаемся на 1 позицию в обоих файлах назад и пишем измененные переменные: { продолжаем: вместо readkey } |
V@nix |
![]() ![]()
Сообщение
#5
|
Группа: Пользователи Сообщений: 3 Пол: Мужской Репутация: ![]() ![]() ![]() |
Большое спасибо Volvo!
|
Free |
![]()
Сообщение
#6
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Решил писать в эту же тему. Думаю у меня будет несколько вопросов. Начну с первого. Итак, процедура create, которая создаёт новый файл и спрашивает у пользователя сколько готовить записей и соответсвенно считывает все поля с клавиатуры. Предположим у нас запись состоит из двух полей, вот фрагмент кода:
Код writeln('skolko zapisej gotovitj v novom faile?'); readln(n); ... for i:=0 to n do begin seek(f,i); clrscr; gotoxy(8,3); write('zapisj Nr:',i+1); gotoxy(6,4); write('A:'); {первое поле} ... {ввод поля А с клавиатуры} readln(X); rec.A:=X; gotoxy(6,5); write('B:'); ...{ввод поля В} readln(X); rec.B:=X; write(f,rec); write('to continue press any key); readkey; end; ... Вопрос правильно ли я всё написал, те ли операторы использовал, будет ли моя задумка реализована? |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
Цитата(Free @ 28.05.05 18:44) процедура create, которая создаёт новый файл и спрашивает у пользователя сколько готовить записей и соответсвенно считывает все поля с клавиатуры. В принципе - правильно, но есть кое-что "лишнее"... ... Если убрать Seek то при записи в файл указатель будет перемещаться автоматически... И второе - зачем делать readln(X); когда можно прямо: readln( rec.B ); |
Free |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
volvo, спасибо.
Цитата И второе Ну это я для наглядности написал, в программе у меня по другому. У меня procedure InputData(var Name : string; leng : integer; p:boolean);которая проверяет корректность ввода, и которую я вызываю для счтения поля с клавиатуры в следующем виде Inputdata(str,leng,false); возвращает значение str, которое я и присваиваю полю (rec.b:=str); leng в процедуре это допустимая длина поля, а p true/false в зависимости от типа конкретного поля. Немного кода: program ... Что в данном случае мы выполняем процедурой val? |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
Преобразуем строковое представление числа (хранящееся в типе String) в нормальное числовое (в тип Real), при этом позиция первого ошибочного символа возвращается через переменную Sk типа Integer :yes:
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Подробней читай Turbo Pascal Help...
|
Free |
![]()
Сообщение
#11
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Подскажите как реализовать процедуру добавления новой записи. Не знаю как увеличить размер файла.
|
suriv |
![]()
Сообщение
#12
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 234 Пол: Мужской Реальное имя: AHTOH Репутация: ![]() ![]() ![]() |
всмысле увеличить размер ?
забей туда что-нить -------------------- Хочу в репу !
Cмотри,а то ведь получишь! Админ. Не получит - его фиг догонишь! Админ №2. P.S Вы еще третьего админа притащите сюда :D ваш аффтар :D Звали? :D (админ № не помню какой) ха больше нифига не напишете афтар Уверен? (Moderator) А еще можно ? (супмодер) Хватит его мучать ! Избили уж... (админ) Не хватит. я тоже напишу (тоже Админ) |
volvo |
![]()
Сообщение
#13
|
Гость ![]() |
Цитата(Free @ 29.05.05 1:11) Подскажите как реализовать процедуру добавления новой записи. Seek(f, FileSize(f)); |
Free |
![]()
Сообщение
#14
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
suriv, я неправильно выразился. volvo, спасибо.
|
Free |
![]()
Сообщение
#15
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Очередной вопрос. Сейчас работаю над процедурой edit, которая будет редактировать поле в записи. Предполагается, что номер записи и название поля вводит пользователь. Проблема в том, чтобы выполнить защиту от ошибки ввода таким образом, чтобы при вводе названия поля считывалось действительно существующее название, а если была ошибка, то выдавалось бы сообщение о ней и программа продолжала работу. Вот что сделал я :
Вопрос достаточно ли это эффективный алгоритм и вообще будет ли он выполнять поставленную задачу? |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Цитата(Free @ 29.05.05 17:31) чтобы при вводе названия поля считывалось действительно существующее название, а если была ошибка, то выдавалось бы сообщение о ней и программа продолжала работу. <...> будет ли он выполнять поставленную задачу? Нет, не будет... Ты не можешь работать с названиями полей. Тем более, ты не можешь вводить нестандартные типы: {$I-} Ошибка - "Error 64: Cannot Read or Write variables of this type." Единственное, что ты можешь сделать - это ввести названия полей как строки и проверять наличие того или иного поля... |
Free |
![]()
Сообщение
#17
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите разобраться с процедурой Delete, которая бы удаляла запись из файла. Если мы удаляем запись из середины файла, то остальные записи, которые распологались за удаляемой записью передвигались на одну позицию влево (в файле) таким образом освободится одно место для записи в конце файла, его тоже требуется удалить, тем самым уменьшив размер файла.
|
volvo |
![]()
Сообщение
#18
|
Гость ![]() |
type Если же у тебя указатель уже стоит на том элементе, который надо удалить, то перед циклом можешь просто поставить pos := filepos(f); |
Free |
![]()
Сообщение
#19
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Начал отладку программы, появились некоторые проблемы.
1) {редактирует запись, номер котрой вводит пользователь} И вместо того чтобы выводить нормально все поля в записи на экране появляется какая-то белеберда, в чём ошибка? 2) {сортировать информацию по цене белета} опять же при выводе на экран выводится белеберда и ещё по-моему добовляются лишние записи. 3) {найти информацию по указанному полю} Почему выводится ошибка считывания с диска? |
volvo |
![]()
Сообщение
#20
|
Гость ![]() |
Цитата И вместо того чтобы выводить нормально все поля в записи на экране появляется какая-то белеберда, в чём ошибка? ... 2. procedure FSortByPrice(var f:filetype); 3. procedure FFind(var f:filetype); |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 19:07 |