Помощь - Поиск - Пользователи - Календарь
Полная версия: Оператор Case и поиск в записи
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Pirate
Помогите организовать поиск через case


procedure findfio;
var
maska: string;
flag: boolean;
countrec: integer;
begin
name_of_file;
assign(f, file_name);
{$I-}
reset(f);
{$I+}
if IOresult = 0 then
begin
write('Vvedite familii dlya poiska: ');
readln(maska);
flag:=false;
countrec:=0;
while (not Eof(f)) do
begin
read(f,rec);
with rec do
if pos(maska,fio) <> 0 then \\Как организовать через case чтобы заместо fio было year и address
begin
flag:=true;
inc(countrec);
writeln(' Fio ',fio:5,' Vozrast',year:5,'Address',home:5,'Group',group:5);
end;
end;
if flag then
begin
writeln(' Chislo zapisei s imenem : ',maska,'=',countrec);
end
else
writeln(' Fail ne soderzhit familii',maska);
close(f);
end
else
writeln('File ',+file_name+' is not');
end;




Хотел сначала case оператор of
1:s:='fio';
2:s:='Year'
3:s:='Address'

s-строка

а потом сделать сравнение if pos(maska,s) но так не работает а 3 процедуры слишком код громоздкий получается
volvo
Покажи описание типа-структуры (Rec), что там у тебя за параметры присутствуют? В принципе, можно поиграться с вариантной записью...
Pirate

Program lib;
uses crt;
type Books=record
number:integer;
fio:string;
group:string;
home:string;
year:integer;
end;

var
rec:books;



Вот оно!



volvo
Сделай так:

type
Books = record
number:integer;
year:integer;
case boolean of
false: (
fio: string;
group: string;
home: string
);
true: (
st: array[1 .. 3] of string
);
end;

Тогда обращение Rec.fio будет полностью эквивалентно обращению Rec.st[1], и т.д. со всеми строками; и можно будет сделать и вот так:
for i := 1 to 3 begin
if pos(maska, st[i]) then ...
end;
, и просто обращаться по индексу к любому из полей fio, group, home ...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.