Помощь - Поиск - Пользователи - Календарь
Полная версия: Записи, работа с файлами
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Alex J'Root
Вот процедура расширенного поиска. Точнее это разработка, т.е. есть данные по мобильным телефонам, пользователь вводит условия, а прога находит ему подходящий вариант.

Идея реализации: Считывать данные введённые пользователем, потом сравнивать с данными которые есть в файле, если одинаковы, то записывать в файл, потом старый файл удалять, а новый переименовывать... и дальше идти по запросам.

В чём проблема: вроде всё правильно написанно, но прога тупо выводит значение последней записи, а не той которой нужно. Подскажите что можете.

Procedure MultiSearch;
Var
  st:ykazatel;
  MobileMark:string[30];
  fo,f1,flast:file of ykazatel;
  rez:char;
  n,i,v,m:integer;
Begin
  clrscr;
  assign(f,filename);
  assign(f1,'search.txt');
  reset(f);
  rewrite(f1);
  writeln('***Расширенный поиск***');
  writeln;
  writeln('Введите данные, которые удовлетворяют вашему запросу!');
  writeln('Если параметр для вас не важен, оставте его пустым.');
  readln;
  writeln('***Основные***');
  writeln;
  write('Марка телефона: '); readln(MobileMark);
  If MobileMark<>' ' then
					 Begin
					   assign(fo,'search1.txt');
					   rewrite(fo);
					   while not eof(f) do
						 begin
						   read(f,st);
						   if MobileMark=st.MobileMark then
														Begin
														  write(fo,st);
														  read;
														  v:=v+1;
														End;

						 end;
					   truncate(fo);
					   close(fo);
					   close(f1);
					   erase(f1);
					   rename(fo,'search.txt');

					 end;

  assign(flast,'search.txt');
  reset(flast);
  For i:=1 to filesize(flast) do
	Begin
	  clrscr;
	  writeln('***Основные***');
	  writeln;
	  writeln('Марка телефона: ',st.MobileMark);
	  writeln('Модель телефона: ',st.Mobile);
	  writeln('Стоимость: ',st.Cost);
	  writeln('Дата выхода на рынок: ',st.Data);
	  writeln('Стандарт: ',st.Standart);
	  writeln('Размеры: ',st.Size);
	  writeln('Конструкция: ',st.Konstruk);
	  writeln('Экран: ',st.Ekran);
	  writeln;
	  seek(flast,n+1)
	End;
   readln;
End;
Alex J'Root
Ребят помогите с проблемой. Уже сижу 2-ой день. Курсовую сдавать на след. неделе. Плиз! !help.gif
Client
seek(flast,n+1)
Первое что в глаза бросилось. Где n получает значение?
Alex J'Root
Ну, в данном случае нигде. Но это же не имеет значение, т.к. это вывод данных. Мне нужно сделать правильную запись данных, т.е. по запросам, а вывести я всегда успею. Я думаю, что не в этом ошибка smile.gif Есть ещё предложения?
volvo
Цитата
Но это же не имеет значение, т.к. это вывод данных.
В первом посте ты что написап?
Цитата
В чём проблема: вроде всё правильно написанно, но прога тупо выводит значение последней записи, а не той которой нужно.
Это, по-твоему, уже не вывод?

Это во-первых. Во-вторых, ты в цикле
  For i:=1 to filesize(flast) do
  Begin
    ...
ничего из файла flast не читаешь, а выводишь... Что? Правильно, содержимое записи ST, то есть, последней прочитанной из старого файла... Добавь чтение данных из flast... А Seek в том цикле тебе вообще не нужен. Да и вообще, с чего вдруг работа с файлом ведется через цикл For?

Кстати, V у тебя тоже нигде не инициализируется.
-Alex-
Спасибо большое! Помогло smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.