![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
LeoKiyv |
|
||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.4.2012 Репутация: нет Всего: нет |
Доброго времени суток. У меня совсем простой вопрос, но который для меня оказался сложен.
Как читать построчно из файла? Пример о функции fgets читает только первую строку:
А как считывать остальные строки? Нужно для нахождения определенного слова в файле вида:
а именно первых слов (Кошка, Собака, Чайник), для программы-словарика, о которой я писал: http://forum.vingrad.ru/forum/topic-351496.html Это сообщение отредактировал(а) LeoKiyv - 9.5.2012, 12:33 |
||||
|
|||||
NadezdaT |
|
|||
Крылья Профиль Группа: Участник Сообщений: 19 Регистрация: 4.4.2012 Репутация: нет Всего: нет |
попробуй
while (!feof(fin)) // fin файл { fgets(strok, l_model, fin);//strok строка из n символов fscanf_s(fin, "\n"); } |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
LeoKiyv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.4.2012 Репутация: нет Всего: нет |
feodorv, спасибо, заработало.
Модифицировал немного прогу, чтобы она находила искомую строку:
Как сделать, чтобы она выдавала текст в строке, после найденного слова? К примеру, нашло оно слово Кошка и выдавало его определение: пушистый, лохматый зверь ? Это сообщение отредактировал(а) LeoKiyv - 9.5.2012, 19:26 |
|||
|
||||
feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Да практически намёки уже есть в коде: Функция strstr (а Вам точно зависимый от регистра букв поиск нужен?) возвращает не просто есть-нет, а прямо-таки указатель внутрь строки, где встретилась искомая последовательность. Только, на мой взгляд, Вы неправильно делаете. Если у Вас строки в словаре имеют вид
то нужно сравнивать начало строки (а не искать подстроку), плюс нужно убедиться, что в конце слова стоит точка с запятой. Это можно сделать так: заранее (до цикла) узнать длину слова, внутри цикла сравнить считанную строчку и заданное слово с помощью strncmp( mystring, word, wordlen), а затем посмотреть окончание слова:
Ну и с двойными ковычками разобраться (если они действительно нужны). -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
LeoKiyv |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.4.2012 Репутация: нет Всего: нет |
А как это использовать? Я потом с помощью:
Узнаю номер символа, где в строке заканчивается это слово. И вывожу потом оставшуюся часть строки на экран:
Вот только оно выдает еще кучу левых символов, после окончания строки, которыми оно заполнило масив char до сотни. Так и не знаю, как отлавливать конец строки. ------------------------------------------------------------------------------------------------------- Благодарю за подсказку. А как узнать длину wordlen вводимого с клавиатуры слова? sizeof(mystring) выдает всегда именно ту длину, которую я указал вручную, а именно 100. Это сообщение отредактировал(а) LeoKiyv - 9.5.2012, 21:37 |
||||||
|
|||||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
LeoKiyv |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.4.2012 Репутация: нет Всего: нет |
Спасибо, заработало) Ты настоящий волшебник! ![]() Вот у меня еще вопрос. Используя код:
Как потом вывести часть строки после ';', без изспользования цикла for? Это сообщение отредактировал(а) LeoKiyv - 10.5.2012, 11:11 |
||||||||
|
|||||||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
))))
подойдёт? PS Если строка в файле заканчивается переводом строки, то при её печати перевод строки на новую строку уже будет ;) Если нет (такое возможно для самой последней строки файла), то не будет))) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
LeoKiyv |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.4.2012 Репутация: нет Всего: нет |
Да, то что нужно. Переделал программу, чтобы она читала словарь Даля, который взял здесь: http://www.zipsites.ru/slovari/dal/ Там слова представлены в виде:
Мой рабочий код:
Пока не знаю, как научить программу воспринимать кирилицу, транслитерировал весь словарь Штирлицем. Сейчас учусь как привязать все это к простой форме MFC: http://forum.vingrad.ru/forum/topic-351496.html Это сообщение отредактировал(а) LeoKiyv - 10.5.2012, 15:31 |
||||||
|
|||||||
feodorv |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
С многострочными записями работать не так просто. Вот например: А если нету следующей строки? Где проверка на NULL?
Про то, что strstr делает совсем не то, что Вы от неё хотите, я уже писал. Писал и как правильно сравнивать начало строк ![]() И где перевод в верхний регистр?
Опять таки, strstr - поиск подстроки в строке, а не сравнение начала строки (а вдруг такое встретится в ненужном месте?) Судя по тем записям словаря Даля, который Вы привели, достаточно проверить
Можно почитать здесь ![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||||
|
|||||||
LeoKiyv |
|
|||
Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 4.4.2012 Репутация: нет Всего: нет |
Подключил #include <locale.h>
Написал setlocale(LC_ALL, ""); Все равно не хочет искать русский текст в файле. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |