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

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

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

 
 Ответить  Открыть новую тему 
> Как сделать выборку, из txt
сообщение
Сообщение #1





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

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


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


Гость






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





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

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


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

ЕЕ ПП
55

Если не трудно, конечно..
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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;
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


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





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

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


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

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

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


Гость






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





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

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


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


Гость






Не может быть... Тогда показывай программу ПОЛНОСТЬЮ. Чего-то ты намудрил...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гость






Ты это здесь набирал? Тогда меня ЭТО не интересует, ты уже внес ошибки при наборе... Я в "глухие телефоны" не играю. Присоединяй аттачем ТВОЙ файл, который у тебя не работал, ибо то, что есть в предыдущем посте ДАЖЕ не скомпилируется!
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13





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

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


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

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

 





- Текстовая версия 29.09.2020 9:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name