Это опять я беспокою вас со своими БД. Не подскажете как сделать проверку на наличие файла в этом случае:
Procedure ReadBD(var DBB:aREC);
Var
I:byte;
S:string;
f:text;
Begin
write('Enter path: (введите путь к файлу):'); readln(s);
assign(f,s);
reset(f);
for i:=1 to MaxRec do
begin
with DBB[I] do
begin
readln(f,name);
readln(f,number)
end
end;
close(f)
end;
Procedure EnterBD(var DBB:aRec);
var
i:byte;
begin
for i:=1 to MaxRec do
begin
with DBB[i] do
begin
write('Enter name:');
readln(name);
write('Enter numbel:');
readln(number)
end
end
end;
М | Пользуйся тегами CODE ! klem4 |
function FileExists(var F : file; path : string) : boolean;
begin
assign(f, path);
{$i-}
reset(f);
{$i+}
FileExists := (IOResult=0)
end;
// функция вернет true если файл существует и откроет его для чтения
А как применить это? А то не могу сообразить совсем
Procedure ReadBD(var DBB:aREC);
...
Begin
write('Enter path: (введите путь к файлу):'); readln(s);
assign(f,s);
{$I-} reset(f); {$I+}
If IOResult = 0 Then Begin
for i:=1 to MaxRec do begin
{ читать записи }
close(f)
end
Else Writeln('файл не найден');
end;
я имею ввиду макс. количество записей пусть будет 1000. но сделать это так, чтобы пользователь мог ввести 1 запись и выйти при назжатии, допустим, Esc.
i := 1;
repeat
write('x[',i,']=');
readln(x[i]);
writeln('Будете вводить еще ? [Y/N]');
repeat
ch := readkey;
until ch in ['y','Y','n','N'];
if ch in ['n','N'] then inc(i);
until ch in ['y','Y'];
volvo, что-то не катит. ошибку 113 выдаёт. точней сначала, почему нет <;> после слова end (после которого следует else), а после 113 на строчке else
Ты бы код привел, у нас штатный телепат в отпуске до 30-го ...
Пишешь такую функцию (которая читает строку максимальной длины max_len, но при нажатии Esc сразу же возвращает пустую строку):
uses crt;
function get_str(max_len: byte): string;
var s: string; ch: char;
begin
s := '';
repeat
ch := readkey;
if length(s) <= max_len then
case ch of
#27: begin
get_str := '';
exit;
end;
#8: begin
if length(s) > 0 then begin
write(#8,#32,#8);
delete(s, length(s), 1)
end
end
else
if length(s) <> max_len then
begin s := s + ch; write(ch) end
end;
until ch = #13;
writeln;
get_str := s
end;
Procedure EnterBD(var DBB:aRec);
var
i:byte;
finished: boolean;
begin
i:=1; finished := false;
while (i <= maxRec) and (not finished) do
with DBB[i] do begin
write('Enter name:'); name := get_str(80);
if name <> '' then begin
write('Enter number:'); readln(number)
end
else finished := true;
inc(i)
end;
end;
.......смотреть выше
Else Writeln('файл не найден');
------
error in statement 113
Михаил, я не давал полный код для проверки файла... Полная процедура выглядит так:
Procedure ReadBD(var DBB:aREC);
Var
I:byte;
S:string;
f:text;
Begin
write('Enter path: (введите путь к файлу):'); readln(s);
assign(f,s);
{$I-} reset(f); {$I-}
If ioresult = 0 Then begin
for i:=1 to MaxRec do begin
with DBB[I] do begin
readln(f,name); readln(f,number)
end
end;
close(f)
end
else Writeln('file not found');
end;
Всё работает. Огромное спасибо!
Только вот блок-схему осталось сделать. Делал раньше на элементарные программы, а на такую как делать не представляю
А нет. Есть всё же одна ошибка. Когда введёшь определённое кол-во данных и нажмёшь Esc, то после этого не сохр. в файл. Ошибка 202. И кроме того, когда набираешь телефон и жмёшь esc, то всё работает нормально, а с именем выходит в меню
Вообще не могу понять при чём тут ошибка 202. Выложил прогу. Взгляни если не лень..
я просто не знаю к чему могут предраться преподы, но думаю из-за таких мелочей точно баллы понизят
Прикрепленные файлы
BD1tip.pas ( 3.01 килобайт )
Кол-во скачиваний: 240
тепреь к тому , к чму можно придраться..
Procedure PrintBD(DBB:aRec);
var i:byte;
begin
for i:=1 to MaxRec do
begin
writeln(i,'. NAME= ',DBB[I].NAME);
writeln('Number = ',DBB[I].NUMBER);
end;
writeln('нажмите любую клавишу ...');
readkey
end;
for i:=1 to MaxRec do if DBB[i].NAME<>'' then
begin
writeln(i,'. NAME= ',DBB[I].NAME);
writeln('Number = ',DBB[I].NUMBER);
end;
If ioresult = 0 Then begin
for i:=1 to MaxRec do begin
i:=1;
while not eof(f) do begin
inc(i);
with DBB[I] do begin
readln(f,name); readln(f,number)
end
end;