Авторизация

Логин: Пароль:
Регистрация Забыли свой пароль?

Проблема с задачей

Страницы: 1
Проблема с задачей, Текстовый файл
Задача: создать текстовый файл в виде таблицы с полями: "Ф.И.О. врача" "Специализация" "№ кабинета" и "Время приема".
1. Вывести информацию на экран их файла в виде таблицы (Это проблем не составляет)
2. Найти информацию о врачах определенной специализации.

Проблема со 2-ым пунктом, не могу реализовать. Через тип - запись делать нельзя.

Третий день мучаюсь smile:(
Заранее спасибо smile:)
А в каком виде хранятся данные и какой код программы? Наверно, надо сделать проверку по всему массиву элементов на совпадение с нужным значением.
Accende lumen sensibus, infude ainorem corbidus!
Проблема еще в том что нельзя делать через массив smile:( Если бы можно было я бы и сам справился smile:)
Код
program vrachi;
uses crt;
var f:text;
st,ima,spec,vr,sp,ch,g:string;
n,i,kab,k:integer;

begin
clrscr;
assign(f,'vrach.txt');
rewrite(f);
writeln(f,'                             Vrachi                        ');
writeln(f,'|---------------------------------------------------------|');
writeln(f,'|     Ima    |    Specializ  | Nomer kab |   Vrema priema |');
writeln(f,'|------------|---------------|-----------|----------------|');
write('Scolco budet zapisei? ');
readln(n);
for i:=1 to n do
begin
writeln('Vvedite zapis nomer -> ',i);
write('Vvedite ima vracha -> ');
readln(ima);
write('Vvedite specializaciu -> ');
readln(spec);
write('Nomer cabineta -> ');
readln(kab);
write('Vvedite chasi priema -> ');
readln(vr);
writeln('-----------------------');
writeln(f,'|',ima:5,'|',spec,'|',kab:4,'|',vr:6,'|');
end;
writeln(f,'|------------------------------------|');
readln;
clrscr;
       reset(f);
       writeln(st);
       while not eof(f) do
       begin
       readln(f,st);
       writeln(st);
       end;
       writeln('-----------------------------------------------------');
       readln;
       ch:='y';
       while ch='y' do
       begin
         write('Vvedite specializaciu: ');

{Код поиска по специализации}

       writeln('Prodoljit poisk? (y/n)');
       readln(ch);
       end;
       readln;
       end.
Могу подсказать идею алгоритма, если правильно все понял. Нужно построчно читать файл, дальше получать с помощью сплита по | содержимое для специализации. Либо если так нельзя, то с помощью функции поиска подстроки. И так цикл для всех строк. Помогло или проблема в чем-то еще? В общем, в основном тут нужны функции для работы со строками
Изменено: motorway11 - 30.04.2010 18:14:26
Accende lumen sensibus, infude ainorem corbidus!
motorway11
Если не сложно напиши оба варианта решения, как никак а программинг люблю - хочется несколько вариантов решения разобрать smile:)
P.S. Код программы немного не правильный: есть не нужные переменные, просто часто приходилось его дописывать/переделывать вот и осталось smile:D
Изменено: Сергей - 02.05.2010 15:54:36
Я честно давно не работал с Дельфи - функции обработки строк не помню. На PHP, к примеру, для меня это легко, а здесь - подзабыл, так сразу не напишу. По сути, тут нужно найти только несколько функций - как считывать каждую строку из файла, и дальше разбор строки по разделителям.
Accende lumen sensibus, infude ainorem corbidus!
motorway11
PHP к сожалению не знаю, ладно завтра попробую еще что-нибудь: попробую через функцию. Как сделаю напишу здесь код программы, может кому-нибудь пригодится smile:)
Вот такой код может помочь для получения в массив частей строк, расположенных между разделителями:
Код
procedure TForm1.FormCreate(Sender: TObject);
var x:TStringList;
begin

 x:=TStringList.create;
  x.text:=stringReplace('часть1|часть2|часть3','|',#13#10,[rfReplaceAll]);
  showmessage(x[0]);
  showmessage(x[1]);
  showmessage(x[2]);
  x.free;
end;

end.

Т.е., в нашем случае отсюда можно получить специализацию, и дальше с ней что-нибудь делать.
Изменено: motorway11 - 03.05.2010 18:53:32
Accende lumen sensibus, infude ainorem corbidus!
motorway11
Огромное Спасибо. smile:)
Придумал свой код реализации этой задачи, получился не совсем удобный но хоть что то:
Код
program vrachi;
uses crt;
var f:text;
st,ima,spec,kab,vr,sp,ch,pr,sp0,g:string;
n,i,k:integer;

   procedure killprobel (pr0:string);
   begin
   i:=1;
   pr:=' ';
   while i<>0 do
   begin
   if sp0[1]=pr then delete(sp0,1,1) else i:=i-1;
   end;
   end;
   

begin
clrscr;
assign(f,'vrach.txt');
rewrite(f);
writeln(f,'                             Vrachi                        ');
writeln(f,'|---------------------------------------------------------|');
writeln(f,'|     Ima    |    Specializ  | Nomer kab |   Vrema priema |');
writeln(f,'|------------|---------------|-----------|----------------|');
write('Scolco budet zapisei? ');
readln(n);
for i:=1 to n do
begin
writeln('Vvedite zapis nomer -> ',i);
write('Vvedite ima vracha -> ');
readln(ima);
write('Vvedite specializaciu -> ');
readln(spec);
write('Nomer cabineta -> ');
readln(kab);
write('Vvedite chasi priema -> ');
readln(vr);
writeln('-----------------------');
writeln(f,'|',ima:20,'|',spec:15,'|',kab:3,'|',vr:8,'|');
end;
writeln(f,'|------------------------------------|');
readln;
clrscr;
       reset(f);
       writeln(st);
       while not eof(f) do
       begin
       readln(f,st);
       writeln(st);
       end;
       writeln('-----------------------------------------------------');
       readln;
       ch:='y';
       while ch='y' do
       begin
         write('Vvedite specializaciu: ');
                  readln(sp);
                 close(f);
                 reset(f);
                 i:=1;
                  while i<5 do
                  begin
                  readln(f,st);
              writeln(st);
                  i:=i+1;
                  end;
      k:=1;
       while not eof(f) do
                  begin
                  readln(f,st);
              g:=st;
              delete(st,38,14);
              delete(st,1,22);
              sp0:=st;
              killprobel(sp0);
              if sp0=sp then writeln(g);
                  end;


       writeln('Prodoljit poisk? (y/n)');
       readln(ch);
       end;
       readln;
       end.
Изменено: Сергей - 12.05.2010 22:33:41
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)