IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Записи, работа с файлами
Alex J'Root
сообщение 26.05.2008 18:23
Сообщение #1


Гость






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

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

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

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;
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 28.05.2008 8:14
Сообщение #2


Гость






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

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

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

Сообщение отредактировано: volvo - 28.05.2008 10:29
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 14:18
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"