Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2008, 00:39   #1
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
По умолчанию Нерабочая процедура

Пишу программу на паскале. Программа рабочая, свои действия выполняет, если не считать одной процедуры, назначение которой удалять запись из файла по введенному имени лекарства одного из поля(всего в записи 4 поля: собственно само nazvanie, summa, srok, strana).
Выкладываю то, что у меня находится в главном варе и саму продедуру. Программа компилируется, но, когда в пункте меню выбираешь эту процедуру, то выскакивает в месте read(kf,sa) ошибка disk read error. Помогите, пожалуйста, исправить.
program apteca;
uses crt,windos;
const
days:array[0..6] of string[9]=('Sunday','Monday','Tuesday','Wedn esday','Thursday','Friday','Saturda y');
var y,mth,d,dow:word;
h,l,sec,hund:word;
type
lek=record
summa:integer; {stoimost}
nazvanie:string[25]; {nazvanie lekarstva}
srok:longint; {srok godnosti}
strana:string; {proizvoditel}
end;

const
max=100; {kolichestvo zapisej}

var
kf:file of lek;

f1:text; {failovaja peremennaja massiva}
f2:text; {failovaja peremennaja dla sortirovannogo massiva}
a:array [1..max] of lek; {massiv zapisej}
num:integer; {obshee kolichestvo zapisej v massive}
i:integer;
sel:integer; {vibor punkta menu}
key2,key4:string;
key1,key3:longint; {kluchi dla poiska, zadavaemie polzovatelem}
sum:longint; {summi znachenij polej}
err:integer;
s:boolean; {kluch,soobshaushij o sortirovannosti massiva}
zap1,zap2:lek; {dve sosednie zapisi,obmenivaemie pri sortirovke}
m,n:longint; {pola sosednix zapisej sravnivautsa pri sortirovke}

{opisanie procedur}
procedure menu; forward;
procedure zapis; forward;


procedure dellekarstva;
var tmp:file of lek;
sa:lek;
nazv:string[25];
begin
assign(kf,'spis1');
reset(kf);
assign(tmp,'tmp1');
rewrite(tmp);
clrscr;
writeln('udalenie lekarstva iz bazi');
writeln;
writeln('vvedite nazvanie lekarstva');
readln(nazv);
while not eof(kf) do
begin
read(kf,sa); {*****************}
if sa.nazvanie<>nazv then write(tmp,sa);
end;
close(tmp);
close(kf);
erase(kf);
rename(tmp,'spis1');
end;
Foky вне форума Ответить с цитированием
Старый 07.11.2008, 01:01   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Цитата:
Error 100: Disk read error.
Процедура Read сообщает об этой ошибке на типизированном файле, если вы пытаетесь считывать что-либо после конца файла.
Процедура у вас нормальная, а вот файл 'spis1' похоже не типизированный
eoln вне форума Ответить с цитированием
Старый 07.11.2008, 01:10   #3
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
По умолчанию

Файл был действительно нетипизированный, но если изменить везде spis1 на spis1.txt опять же не работает в том месте.
Foky вне форума Ответить с цитированием
Старый 07.11.2008, 01:22   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Цитата:
Сообщение от Foky Посмотреть сообщение
Файл был действительно нетипизированный, но если изменить везде spis1 на spis1.txt опять же не работает в том месте.
Уточню, файл у вас не является типизированным.
Но объявлен как типизированный
Цитата:
var
kf:file of lek;
То есть программа (процедура) будет работать только если файл был создан самой программой, а не написан в блокноте.
Пример создания типизированного файла
Код:
var
 kf:file of lek;
 s: lek;
begin
 assign(kf, 'spis1');
 rewrite(kf)
 {тут запись в файл типа write(kf, s);}
 close(kf)
end;
eoln вне форума Ответить с цитированием
Старый 07.11.2008, 01:36   #5
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
По умолчанию

Если я буду делать rewrit-ом, то у меня всё содержимое файла пропадет. Или предлагаете объявить файл как нетипизированный?
Foky вне форума Ответить с цитированием
Старый 07.11.2008, 01:45   #6
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Господь с вами. Один раз создали в начале, а потом уже не rewrite, а reset использовать надо будет. Также нужна команда seek для перемещению по файлу. А нетипизированные тут вообще не нужны.
eoln вне форума Ответить с цитированием
Старый 07.11.2008, 01:56   #7
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
По умолчанию

Ну, наверное, файл spis1 я ранее создавала и в нем уже что-то есть(другие процедуры). Поэтому rewrite не пойдет.
А с windos всё в порядке. Так и пишится. Это для времени и даты. В units так и написано-windos.
Foky вне форума Ответить с цитированием
Старый 07.11.2008, 02:03   #8
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

Ну тогда весь код на показывайте (желательно в архиве), либо самостоятельно ищем способы программного создания файла spis1
eoln вне форума Ответить с цитированием
Старый 07.11.2008, 10:07   #9
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Цитата:
assign(kf,'spis1');
reset(kf);
assign(tmp,'tmp1');
А почему Вы не указываете расширения файлов, которые вызываете? Вы вводите неполное имя файла и у Вас ничего не выйдет. Нужно например
assign(kf,'spis1.dat'); или assign(kf,'spis1.txt');Это смотря какой файл и какое у него расширение.
puporev вне форума Ответить с цитированием
Старый 07.11.2008, 14:03   #10
Foky
Пользователь
 
Регистрация: 14.03.2008
Сообщений: 32
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
А почему Вы не указываете расширения файлов, которые вызываете? Вы вводите неполное имя файла и у Вас ничего не выйдет. Нужно например
assign(kf,'spis1.dat'); или assign(kf,'spis1.txt');Это смотря какой файл и какое у него расширение.
Файл вообще без никакого расширения(просто spis1), поэтому имя полное. Я просто пробовала дописывать расширение в коде программы и файл переименовать соответственно.
Foky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оконная процедура HunterMan Win Api 5 04.06.2008 12:10
Хранимая процедура. nimf БД в Delphi 2 22.04.2008 13:16
Процедура () GAGARIN-NEW Помощь студентам 3 17.12.2007 21:42
процедура sееk Snake_ua Паскаль, Turbo Pascal, PascalABC.NET 1 02.11.2007 16:22
процедура Sergik1977 Паскаль, Turbo Pascal, PascalABC.NET 7 28.10.2007 16:36