Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Записи, работа с файлами

Автор: Alex J'Root 26.05.2008 22:23

Вот процедура расширенного поиска. Точнее это разработка, т.е. есть данные по мобильным телефонам, пользователь вводит условия, а прога находит ему подходящий вариант.

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

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

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 27.05.2008 23:03

Ребят помогите с проблемой. Уже сижу 2-ой день. Курсовую сдавать на след. неделе. Плиз! !help.gif

Автор: Client 28.05.2008 0:07

seek(flast,n+1)
Первое что в глаза бросилось. Где n получает значение?

Автор: Alex J'Root 28.05.2008 7:17

Ну, в данном случае нигде. Но это же не имеет значение, т.к. это вывод данных. Мне нужно сделать правильную запись данных, т.е. по запросам, а вывести я всегда успею. Я думаю, что не в этом ошибка smile.gif Есть ещё предложения?

Автор: volvo 28.05.2008 12:14

Цитата
Но это же не имеет значение, т.к. это вывод данных.
В первом посте ты что написап?
Цитата
В чём проблема: вроде всё правильно написанно, но прога тупо выводит значение последней записи, а не той которой нужно.
Это, по-твоему, уже не вывод?

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

Кстати, V у тебя тоже нигде не инициализируется.

Автор: -Alex- 29.05.2008 15:27

Спасибо большое! Помогло smile.gif