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

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

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

> Как сделать выборку, из txt
conqu
сообщение 11.12.2006 17:39
Сообщение #1





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Всем доброго времени суток,
Ситуация: есть текстовый файл, в нём записан каталог товаров в виде: строка (несколько слов) - название, на следующей строке - цена, ниже пустая строка и следующий товар в том же формате.
Нужно реализовать такую вещь: пользователь вводит слово, по нему осуществляется поиск и делается выборка тех товаров, в названии которых встречается искомое слово.
Вопрос: подскажите плз, как это сделать, у меня проблема с тем, что названия товаров состаят из 3-7 слов, везде по разному + не знаю, как организовать разделение товаров для скрипта, как вообще осуществляется перемещение указателя на следующую строчку, при чтении из файла. Иными словами: как сделать так, чтобы если в строке встречается заданное слово, скрипт её выводил + следующую, потом проскакивал пустую и делал поиск в следующей строке.
Заранее благодарен.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 12)
volvo
сообщение 11.12.2006 17:43
Сообщение #2


Гость






Читать всю строку полностью (неважно, сколько в ней слов, главное - чтоб было меньше 256 символов) через ReadLN(f, s), искать в ней подстроку через Pos, и проверять результат... Ну, а "проскочить" пустую строку - пустым ReadLN(f) ...
 К началу страницы 
+ Ответить 
conqu
сообщение 11.12.2006 18:39
Сообщение #3





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


спасибо, приведи пожалуйста кусок кода..
для базы:
ААА ПП
22

ЕЕ ПП
55

Если не трудно, конечно..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2006 19:08
Сообщение #4


Гость






В чем сложность?

Write('query = '); ReadLn(query);
while not eof(f) do begin
readln(f, s);
if pos(query, s) > 0 then begin
readln(f, price) { <--- если название совпало - читаем цену }
writeln('found: ', s, ' -> ', price); { <--- и выводим на печать ... }
end;
else readln(f); { <--- иначе - пропускаем строку с ценой }

readln(f); { <--- Пустую строку пропускаем в любом случае }
end;
 К началу страницы 
+ Ответить 
conqu
сообщение 11.12.2006 19:24
Сообщение #5





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Большое спасибо, проблема решена!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
conqu
сообщение 11.12.2006 21:10
Сообщение #6





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Вероятно я туплю жутко, но у меня не работает, Error 113: Error in statment , после else. Не понимаю, без else всё работает, а с ним не хочет, в чём может быть ошибка?

__
добавлено: если убрать ; после end перед else - работет, но выводит только одну запись, первую, где встретится нужное слово, а не все..

Сообщение отредактировано: conqu - 11.12.2006 21:17
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2006 21:12
Сообщение #7


Гость






Там точка с запятой (перед Else) не нужна просто... Убери ее, и все заработает.
 К началу страницы 
+ Ответить 
conqu
сообщение 11.12.2006 21:19
Сообщение #8





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


если убрать ; после end перед else - работет, но выводит только одну запись, первую, где встретится нужное слово, а не все..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2006 21:21
Сообщение #9


Гость






Не может быть... Тогда показывай программу ПОЛНОСТЬЮ. Чего-то ты намудрил...
 К началу страницы 
+ Ответить 
conqu
сообщение 11.12.2006 21:32
Сообщение #10





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +



Programm test;

USES CRT;

var
f:text;
name,s,query,price: string[80];

BEGIN
assign(f,'n:\base.txt');
reset (f);

Write('query=');
Readln(query);

while not eof(f) do
begin

readln(f,s);
if pos(query,s) > 0 then
begin
readln(f,price);
writeln ('found:',s,'->',price);
end
else readln(f);

readln(f);
end;
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 11.12.2006 21:35
Сообщение #11


Гость






Ты это здесь набирал? Тогда меня ЭТО не интересует, ты уже внес ошибки при наборе... Я в "глухие телефоны" не играю. Присоединяй аттачем ТВОЙ файл, который у тебя не работал, ибо то, что есть в предыдущем посте ДАЖЕ не скомпилируется!
 К началу страницы 
+ Ответить 
conqu
сообщение 11.12.2006 21:42
Сообщение #12





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Нет, я оттуда брал, может случайно что-то менял, вот копия из бэкапа, работает, проверял.

Program TTP;

USES CRT;

var
f: text;
name,s,query,price: string[80];



BEGIN
assign(f,'n:\ttp.txt');
reset (f);

Write('query=');
Readln(query);

while not EoF(f) do
begin

readln(f,s);
if pos(query, s) > 0 then
begin
readln(f,price);
writeln ('found:',s,'->',price);
end
else readln(f);

readln(f);
end;

end.



База(кусок):
ttp.txt :
Macromedia Flash 8 работа с анимацией и графикой
470

Macromedia Flash 8 Action Script официальное руководство
709

PHP 5 самое полное руководство
402

Л.Н. Толстой Война и мир
660

Л.Н. Толстой Анна Каренина
760

М. Булгаков Собачье сердце
350

М. Булгаков Мастер и Маргарита
350

А.П. Чехов Собрание сочинений
350

М. Горький Собрание сочинений
350

А.Н. Толстой Собрание сочинений
350


 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
conqu
сообщение 11.12.2006 22:23
Сообщение #13





Группа: Пользователи
Сообщений: 8
Пол: Мужской

Репутация: -  0  +


Заработало, нашёл ошибку. Спасибо за помощь, сорри за тупизм )
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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